← 上一章:什麼是 Git?為什麼要學習它? 下一章:安裝在 Windows 作業系統 →


與其它版本控制系統的差異

分散式系統

跟其它的版控系統(例如 CVS 或 SVN)相比,在上一章有提到,Git 是一種分散式的版本控制系統,就算在深山裡或飛機上沒有網路可使用,也可正常的使用 Git,待有網路的時候再與其它人同步即可。Git 大部份的操作都是在自己電腦上就可完成,而且不管是遠端的伺服器或是自己的電腦,在同步之後大家都會有一份完整的檔案及歷史紀錄。

處理檔案的方式

Git 與其它版控系統最大的差異,是在於處理檔案的方式。其它的版控系統,大多是記錄每個版本之間的「異動」:

image

例如從版本 1 到版本 2,新增了 DE 這兩個檔案,版本 2 到版本 3 則是修改了 BC 這兩個檔案,以此類推。由於記錄了每個版本異動的片段內容,所以版控系統就可以依據這些「片段」,拼湊成完整的檔案。

但是 Git 就不同了:

image

對 Git 來說:

  1. 版本 1 到版本 2:雖然新增了 DE 這兩個檔案,但原本的 AB 以及 C 檔案都沒有異動,所以版本 2 除了記錄了新增加的檔案外,其餘的 A、B、C 這三個檔案會指向版本 1 的 A、B、C 那三個檔案(以灰色表示)。
  2. 版本 2 到版本 3:因為只修改了 BC 兩個檔案,DE 這兩個沒有更改的檔案就是指向版本 2 的 DE,而 A 則是指向版本 1 的 A
  3. 版本 3 到版本 4:新增了 FG 兩個檔案,但 A 一直維持不變,所以它一直都還是指向版本 1 的 A 檔案;BC 檔案會指向版本 3 的 B、C,而 DE 則是指向版本 2 的 D 跟 E。

用白話文來說,就是其它的版控系統在版本變化的時候記錄每次不一樣的地方,而 Git 則是有點像拍照(snapshot)一樣,在每次版本變化的時候,Git 會更新並記錄整個目錄跟檔案的樹狀結構。但如果各位覺得上面這段過程還是太難理解也沒關係,先大概有個印象,在後面章節也都還有更詳細的說明。

其實,在 Git 裡有一些比較複雜一點的物件結構,分別是 BlobTreeCommit 以及 Tag 等等物件,它們都藏在一個名為 .git 的目錄裡面,這些都會在之後的「在 .git 目錄裡有什麼東西?」單元有更詳細的介紹。只要你能了解這些物件的用途,就更能理解 Git 本身的運作原理,就會發現其實 Git 真的是一款相當簡單而且有效率的工具。


← 上一章:什麼是 Git?為什麼要學習它? 下一章:安裝在 Windows 作業系統 →

Comments