← 上一章:什麼是 Git?為什麼要學習它? 下一章:安裝在 Windows 作業系統 →
與其它版本控制系統的差異
分散式系統
跟其它的版控系統(例如 CVS 或 SVN)相比,在上一章有提到,Git 是一種分散式的版本控制系統,就算在深山裡或飛機上沒有網路可使用,也可正常的使用 Git,待有網路的時候再與其它人同步即可。Git 大部份的操作都是在自己電腦上就可完成,而且不管是遠端的伺服器或是自己的電腦,在同步之後大家都會有一份完整的檔案及歷史紀錄。
處理檔案的方式
Git 與其它版控系統最大的差異,是在於處理檔案的方式。其它的版控系統,大多是記錄每個版本之間的「異動」:
例如從版本 1 到版本 2,新增了 D
跟 E
這兩個檔案,版本 2 到版本 3 則是修改了 B
跟 C
這兩個檔案,以此類推。由於記錄了每個版本異動的片段內容,所以版控系統就可以依據這些「片段」,拼湊成完整的檔案。
但是 Git 就不同了:
對 Git 來說:
- 版本 1 到版本 2:雖然新增了
D
跟E
這兩個檔案,但原本的A
、B
以及C
檔案都沒有異動,所以版本 2 除了記錄了新增加的檔案外,其餘的 A、B、C 這三個檔案會指向版本 1 的 A、B、C 那三個檔案(以灰色表示)。 - 版本 2 到版本 3:因為只修改了
B
跟C
兩個檔案,D
跟E
這兩個沒有更改的檔案就是指向版本 2 的D
跟E
,而A
則是指向版本 1 的A
。 - 版本 3 到版本 4:新增了
F
跟G
兩個檔案,但A
一直維持不變,所以它一直都還是指向版本 1 的 A 檔案;B
跟C
檔案會指向版本 3 的 B、C,而D
跟E
則是指向版本 2 的 D 跟 E。
用白話文來說,就是其它的版控系統在版本變化的時候記錄每次不一樣的地方,而 Git 則是有點像拍照(snapshot)一樣,在每次版本變化的時候,Git 會更新並記錄整個目錄跟檔案的樹狀結構。但如果各位覺得上面這段過程還是太難理解也沒關係,先大概有個印象,在後面章節也都還有更詳細的說明。
其實,在 Git 裡有一些比較複雜一點的物件結構,分別是 Blob
、Tree
、Commit
以及 Tag
等等物件,它們都藏在一個名為 .git
的目錄裡面,這些都會在之後的「在 .git
目錄裡有什麼東西?」單元有更詳細的介紹。只要你能了解這些物件的用途,就更能理解 Git 本身的運作原理,就會發現其實 Git 真的是一款相當簡單而且有效率的工具。
Comments