相比同類軟體,git有很多優點。其中很顯著的一點,就是版本的分支(branch)和合併(merge)十分方便。有些傳統的版本管理軟體,分支操作實際上會生成乙份現有**的物理拷貝,而git只生成乙個指向當前版本(又稱"快照")的指標,因此非常快捷易用。
但是,太方便了也會產生***。如果你不加注意,很可能會留下乙個枝節蔓生、四處開放的版本庫,到處都是分支,完全看不出主幹發展的脈絡。
vincent driessen提出了乙個分支管理的策略,我覺得非常值得借鑑。它可以使得版本庫的演進保持簡潔,主幹清晰,各個分支各司其職、井井有條。理論上,這些策略對所有的版本管理系統都適用,git只是用來舉例而已。如果你不熟悉git,跳過舉例部分就可以了。
一、主分支master
首先,**庫應該有乙個、且僅有乙個主分支。所有提供給使用者使用的正式版本,都在這個主分支上發布。
git主分支的名字,預設叫做master。它是自動建立的,版本庫初始化以後,預設就是在主分支在進行開發。
二、開發分支develop
主分支只用來分布重大版本,日常開發應該在另一條分支上完成。我們把開發用的分支,叫做develop。
這個分支可以用來生成**的最新隔夜版本(nightly)。如果想正式對外發布,就在master分支上,對develop分支進行"合併"(merge)。
git建立develop分支的命令:
git checkout -b develop master將develop分支發布到master分支的命令:
# 切換到master分支這裡稍微解釋一下,上一條命令的--no-ff引數是什麼意思。預設情況下,git執行"快進式合併"(fast-farward merge),會直接將master分支指向develop分支。git checkout master
# 對develop分支進行合併
git merge --no-ff develop
使用--no-ff引數後,會執行正常合併,在master分支上生成乙個新節點。為了保證版本演進的清晰,我們希望採用這種做法。關於合併的更多解釋,請參考benjamin sandofsky的《understanding the git workflow》。
三、臨時性分支
前面講到版本庫的兩條主要分支:master和develop。前者用於正式發布,後者用於日常開發。其實,常設分支只需要這兩條就夠了,不需要其他了。
但是,除了常設分支以外,還有一些臨時性分支,用於應對一些特定目的的版本開發。臨時性分支主要有三種:
* 功能(feature)分支這三種分支都屬於臨時性需要,使用完以後,應該刪除,使得**庫的常設分支始終只有master和develop。* 預發布(release)分支
* 修補bug(fixbug)分支
四、 功能分支
接下來,乙個個來看這三種"臨時性分支"。
第一種是功能分支,它是為了開發某種特定功能,從develop分支上面分出來的。開發完成後,要再併入develop。
功能分支的名字,可以採用feature-*的形式命名。
建立乙個功能分支:
git checkout -b feature-x develop開發完成後,將功能分支合併到develop分支:
git checkout develop刪除feature分支:git merge --no-ff feature-x
git branch -d feature-x五、預發布分支第二種是預發布分支,它是指發布正式版本之前(即合併到master分支之前),我們可能需要有乙個預發布的版本進行測試。
預發布分支是從develop分支上面分出來的,預發布結束以後,必須合併進develop和master分支。它的命名,可以採用release-*的形式。
建立乙個預發布分支:
git checkout -b release-1.2 develop確認沒有問題後,合併到master分支:
git checkout master再合併到develop分支:git merge --no-ff release-1.2
# 對合併生成的新節點,做乙個標籤
git tag -a 1.2
git checkout develop最後,刪除預發布分支:git merge --no-ff release-1.2
git branch -d release-1.2六、修補bug分支最後一種是修補bug分支。軟體正式發布以後,難免會出現bug。這時就需要建立乙個分支,進行bug修補。
修補bug分支是從master分支上面分出來的。修補結束以後,再合併進master和develop分支。它的命名,可以採用fixbug-*的形式。
建立乙個修補bug分支:
git checkout -b fixbug-0.1 master修補結束後,合併到master分支:
git checkout master再合併到develop分支:git merge --no-ff fixbug-0.1
git tag -a 0.1.1
git checkout develop最後,刪除"修補bug分支":git merge --no-ff fixbug-0.1
git branch -d fixbug-0.1(完)
Git分支管理策略
如果你嚴肅對待程式設計,就必定會使用 版本管理系統 version control system 眼下最流行的 版本管理系統 非git莫屬。相比同類軟體,git有很多優點。其中很顯著的一點,就是版本的分支 branch 和合併 merge 十分方便。有些傳統的版本管理軟體,分支操作實際上會生成乙份現...
Git分支管理策略
git分支管理策略 作者 阮一峰 如果你嚴肅對待程式設計,就必定會使用 版本管理系統 version control system 眼下最流行的 版本管理系統 非git莫屬。相比同類軟體,git有很多優點。其中很顯著的一點,就是版本的分支 branch 和合併 merge 十分方便。有些傳統的版本管...
Git分支管理策略
如果你嚴肅對待程式設計,就必定會使用 版本管理系統 version control system 眼下最流行的 版本管理系統 非git莫屬。相比同類軟體,git有很多優點。其中很顯著的一點,就是版本的分支 branch 和合併 merge 十分方便。有些傳統的版本管理軟體,分支操作實際上會生成乙份現...