本文介紹一種使用Git進行源代碼管理的分支模型,着重於如何使用Git更好的管理我們的源代碼。
我假定您對Git有一定了解,會使用基本的Git命令進行一些簡單的源代碼管理工作。這不是一篇Git使用教程。
文章的主要思想源自以下鏈接:
http://nvie.com/posts/a-successful-git-branching-model/
根據自己的使用情況進行了補充。
我們知道Git是一個不需要中心服務器就能工作的源代碼管理系統;但我仍然建議你至少保持一個邏輯上的中心服務器來存放你的長期分支(后文我們會說到什么是“長期分支”,什么是“臨時分支”)。我說“邏輯上”的中心服務器,意思是你不必搭建一個真實的服務器——當你只是在實現一個小型應用時,可能開發人員只有你一個人,這個時候你完全可以將長期分支就放在你的項目目錄里。
首先看一張圖:
這張圖上有這么幾個分支:master,develop,feather,hotfix,release。它們之間存在着branch和merge的關系。我們從master和develop開始。
master和develop分支都是長期分支,它們存在於整個項目存續期內。
master分支是整個項目的主分支。
所有其他分支都直接或間接源自master。master分支是可直接用於產品發布的代碼。
develop分支反映最新的開發進程。
develop中的代碼總是可以完整build的。當develop中的代碼進入穩定狀態(修復了絕大多數bug)准備release時,所有develop中的更改將通過release branch最終merge到master。
除master和develop以外的分支都是臨時分支。當這些臨時分支完成其使命,就可以刪除它們。我們先看feather分支。
feather分支用於某個新feather的開發,源自develop,並最終merge到develop。
feather分支最終的結局要么合並到develop branch,要么被拋棄。feather分支用如下命令創建:
# git checkout –b my feather develop
完成后將這個feather合並到develop:
# git checkout develop
# git merge --no-ff myfeather
# git branch –d myfeather
# git push origin develop
合並時--no-ff選項避免fast forward。使用該選項和不使用該選項得到的分支路線圖分別如下:
release分支用於准備新版本的發布。源自develop,merge到develop和master。
release分支僅修復小的bug,完成准備版本號,build date等工作。而develop分支可以同時開始新feather的開發。該分支上修復的bug需要merge到develop,並在該分支完成時merge到master。此時需要給master打上tag,標記這個新的release。
創建release branch:
# git checkout –b release-x.y develop
完成release branch
# git checkout master
# git merge --no-ff release-x.y
# git tag –a x.y
# git checkout develop
# git merge --no-ff release-x.y
# git branch –d release-1.2
Hotfix分支用於緊急bug修復,源自master,merge到develop和master。
對於已發布的產品,可能有意外的緊急bug需要修復。hotfix branch可以避免修復bug的工作影響develop branch。
創建hotfix branch:
# git checkout -b hotfix-x.y master
完成hotfix branch:
# git checkout master
# git merge --no-ff hotfix-x.y
# git tag –a x.y.z
# git checkout develop
# git merge --no-ff hotfix-x.y
# git branch –d hotfix-x.y
這里有個例外就是,如果hotfix發生時有正在進行的release branch,那么將hotfix merge到release,而release最終會merge到develop和master。
到此我們的分支模型介紹就完畢了。我使用這個branch model有幾個月了,感覺是:Great!