為什麼 Git 的分支操作比其他版本控制系統快?


分支允許我們偏離主要工作線,並在隔離的環境中處理其他任務。從概念上講,我們可以將分支視為一個獨立的隔離工作區。我們有一個名為 **master** 的主工作區。

我們可以建立一個特性分支,並在特性分支上單獨工作,以向專案新增更多功能,而不會影響主要工作線。如果特性分支中存在某些錯誤,我們可以修復它,而不會影響其他協作者的工作。一旦特性分支中的所有內容都正常工作,我們可以將其與主要工作線(即 **master** 分支)合併。

上圖顯示有兩個分支,**master** 和一個 **feature** 分支。“commit#21”是從“commit#2”派生出來的,因此 **feature** 分支包含從“commit#1”到“commit#23”的所有提交,而 master 分支包含“commit#1”、“commit#2”和“commit#3”。**master** 和 **feature** 分支可以獨立工作。

分支允許我們處理不同的工作項,而不會弄亂主要工作線的程式碼庫。我們儘可能保持主要工作線的穩定,以便我們可以隨時將其釋出到生產環境。如果新的開發人員加入團隊,新成員可以從 **master** 中開始使用穩定的程式碼庫。這就是分支的理念。

Git 如何以不同的方式管理分支?

如果我們使用像“subversion”這樣的集中式版本控制系統 (CVCS),當建立一個新分支時,它將複製主分支中的所有內容。如果我們的程式碼庫很大,這將導致效能瓶頸。許多人不會在 CVCS 中使用分支,因為分支速度慢且佔用大量磁碟空間。

Git 分支超級快速且廉價。在 Git 中,分支只是一個指向最後一次提交的符號名稱。因此,**master** 分支始終是指向主要工作線中最後一次提交的指標。當我們執行新的提交時,Git 會自動將 **master** 引用向前移動,類似於連結串列。

當我們建立一個新分支時,Git 將建立一個新的指標(此處為 feature),指向最後一次提交。從下圖我們可以看到,**feature** 只是一個指向最後一次提交的指標。因此,Git 分支不會複製任何提交資料,它只是建立一個指標。

現在,當我們在新建立的 **feature** 分支中提交新更改時,**master** 指標將保持不變,但 feature 指標將向前移動。這在下圖中顯示。最初,**master** 和 **feature** 都指向“commit#3”。然後我們切換到 **feature** 分支並執行了提交“commit#4”。因此,**feature** 指標向前移動,但 **master** 分支指標保持原位。**HEAD** 指標指向當前工作分支。

更新於: 2021年2月20日

318 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告