1.3 Git 基礎

2018-02-24 15:22 更新

Git 基礎

那么,簡單地說,Git 究竟是怎樣的一個系統(tǒng)呢? 請注意接下來的內(nèi)容非常重要,若你理解了 Git 的思想和基本工作原理,用起來就會知其所以然,游刃有余。 在開始學習 Git 的時候,請努力分清你對其它版本管理系統(tǒng)的已有認識,如 Subversion 和 Perforce 等;這么做能幫助你使用工具時避免發(fā)生混淆。 Git 在保存和對待各種信息的時候與其它版本控制系統(tǒng)有很大差異,盡管操作起來的命令形式非常相近,理解這些差異將有助于防止你使用中的困惑。

直接記錄快照,而非差異比較

Git 和其它版本控制系統(tǒng)(包括 Subversion 和近似工具)的主要差別在于 Git 對待數(shù)據(jù)的方法。 概念上來區(qū)分,其它大部分系統(tǒng)以文件變更列表的方式存儲信息。 這類系統(tǒng)(CVS、Subversion、Perforce、Bazaar 等等)將它們保存的信息看作是一組基本文件和每個文件隨時間逐步累積的差異。

Figure 1-5.?存儲項目隨時間改變的快照.

這是 Git 與幾乎所有其它版本控制系統(tǒng)的重要區(qū)別。 因此 Git 重新考慮了以前每一代版本控制系統(tǒng)延續(xù)下來的諸多方面。 Git 更像是一個小型的文件系統(tǒng),提供了許多以此為基礎構建的超強工具,而不只是一個簡單的 VCS。 稍后我們在Git 分支討論 Git 分支管理時,將探究這種方式對待數(shù)據(jù)所能獲得的益處。

近乎所有操作都是本地執(zhí)行

在 Git 中的絕大多數(shù)操作都只需要訪問本地文件和資源,一般不需要來自網(wǎng)絡上其它計算機的信息。 如果你習慣于所有操作都有網(wǎng)絡延時開銷的集中式版本控制系統(tǒng),Git 在這方面會讓你感到速度之神賜給了 Git 超凡的能量。 因為你在本地磁盤上就有項目的完整歷史,所以大部分操作看起來瞬間完成。

舉個例子,要瀏覽項目的歷史,Git 不需外連到服務器去獲取歷史,然后再顯示出來——它只需直接從本地數(shù)據(jù)庫中讀取。 你能立即看到項目歷史。 如果你想查看當前版本與一個月前的版本之間引入的修改,Git 會查找到一個月前的文件做一次本地的差異計算,而不是由遠程服務器處理或從遠程服務器拉回舊版本文件再來本地處理。

這也意味著你離線或者沒有 VPN 時,幾乎可以進行任何操作。 如你在飛機或火車上想做些工作,你能愉快地提交,直到有網(wǎng)絡連接時再上傳。 如你回家后 VPN 客戶端不正常,你仍能工作。 使用其它系統(tǒng),做到如此是不可能或很費力的。 比如,用 Perforce,你沒有連接服務器時幾乎不能做什么事;用 Subversion 和 CVS,你能修改文件,但不能向數(shù)據(jù)庫提交修改(因為你的本地數(shù)據(jù)庫離線了)。 這看起來不是大問題,但是你可能會驚喜地發(fā)現(xiàn)它帶來的巨大的不同。

Git 保證完整性

Git 中所有數(shù)據(jù)在存儲前都計算校驗和,然后以校驗和來引用。 這意味著不可能在 Git 不知情時更改任何文件內(nèi)容或目錄內(nèi)容。 這個功能建構在 Git 底層,是構成 Git 哲學不可或缺的部分。 若你在傳送過程中丟失信息或損壞文件,Git 就能發(fā)現(xiàn)。

Git 用以計算校驗和的機制叫做 SHA-1 散列(hash,哈希)。?這是一個由 40 個十六進制字符(0-9 和 a-f)組成字符串,基于 Git 中文件的內(nèi)容或目錄結構計算出來。 SHA-1 哈??雌饋硎沁@樣:

24b9da6552252987aa493b52f8696cd6d3b00373

Git 中使用這種哈希值的情況很多,你將經(jīng)??吹竭@種哈希值。 實際上,Git 數(shù)據(jù)庫中保存的信息都是以文件內(nèi)容的哈希值來索引,而不是文件名。

Git 一般只添加數(shù)據(jù)

你執(zhí)行的 Git 操作,幾乎只往 Git 數(shù)據(jù)庫中增加數(shù)據(jù)。 很難讓 Git 執(zhí)行任何不可逆操作,或者讓它以任何方式清除數(shù)據(jù)。 同別的 VCS 一樣,未提交更新時有可能丟失或弄亂修改的內(nèi)容;但是一旦你提交快照到 Git 中,就難以再丟失數(shù)據(jù),特別是如果你定期的推送數(shù)據(jù)庫到其它倉庫的話。

這使得我們使用 Git 成為一個安心愉悅的過程,因為我們深知可以盡情做各種嘗試,而沒有把事情弄糟的危險。 更深度探討 Git 如何保存數(shù)據(jù)及恢復丟失數(shù)據(jù)的話題,請參考撤消操作。

三種狀態(tài)

好,請注意。 如果你希望后面的學習更順利,記住下面這些關于 Git 的概念。 Git 有三種狀態(tài),你的文件可能處于其中之一:已提交(committed)、已修改(modified)和已暫存(staged)。 已提交表示數(shù)據(jù)已經(jīng)安全的保存在本地數(shù)據(jù)庫中。 已修改表示修改了文件,但還沒保存到數(shù)據(jù)庫中。 已暫存表示對一個已修改文件的當前版本做了標記,使之包含在下次提交的快照中。

由此引入 Git 項目的三個工作區(qū)域的概念:Git 倉庫、工作目錄以及暫存區(qū)域。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號