我與Git的那些破事(下)--分支模型
在上篇文章中,我提到了Git的基本概念和一些本人實際專案中的總結。然而,最近讀了Vincent Driessen寫的一篇文章,覺得他總結的太好了,站在他肩膀上忍不住將自己的理解分享出來。Vincent Driessen的文章連線放在本文最下方,有需要的童鞋可去參考一二。
話不多上,乾貨頂上。
分支模型
上述這張圖便是一張完整的分支模型。乍看上去,似乎有點複雜,其實理解後非常簡單,並且十分經典。如果你所在專案程式碼管理較為混亂,我相信,該模型會對你有所幫助。
主要分支
對於完整的專案來講,有兩個主要分支,它們的生命週期與專案等同,即一直會存在:
- master分支
- develop分支
master:我相信,每個git使用者都非常熟悉該分支,沒錯,這是建立專案時的預設分支。對於該模型,我們認為master分支上任何一個點,都是一個穩定的版本,可以直接部署至產線環境。
develop:這是master的平行分支,也是專案中持續開發的分支。該分支的HEAD始終反應著下一個版本的最新修改。所有的feature分支程式碼都往這裡合入。通常,自動化測試環境都由該分支構建。
當develop分支合入了所有需求分支的程式碼(下個釋出版本所需的功能)並且穩定時,將develop程式碼合入到master分支,並打上版本tag(方便以後版本回溯)。
實際專案中,我們一般不直接從develop分支將程式碼合入至master分支,而是從develop拉出release分支,從release分支合入master分支。詳情往下觀看。
次要分支
除了master和develop分支,開發模型中還需要其他分支來協同開發,其生命週期各不相同,但最終都會被刪除。
- feature分支
- release分支
- hotfix分支
feature分支
當開發團隊接到一個新的需求,從develop分支拉出一個feature分支,該功能相關程式碼均在該分支開發。
當該分支開發完畢,將分支程式碼合入develop分支;
遠端刪除該feature分支,當然開發本地可保留該分支一段時間,防止出現烏龍事件。
本地建立一個feature分支:
#從本地develop分支拉出feature1分支 git checkout -b feature1 develop #從遠端develop分支拉出feature1分支 git checkout -b feature1 origin/develop
將本地分支上傳到遠端:
#將本地新建feature1分支上傳到遠端,並在遠端命名為feature1 git push origin feature1:feature1 #將本地新建feature1分支上傳到遠端,並在遠端命名為feature2 git push origin feature1:feature2
查詢分支
#查詢本地分支 git branch #查詢遠端分支 git branch -r #查詢所有分支 git branch -a
本地切換分支
#切換到develop分支 git checkout develop
本地刪除分支
#刪除本地分支feature1 git branch -d feature1 #強制刪除本地分支feature1 git branch -D feature1 #刪除遠端分支feature1 git push origin :feature1
release分支
當develop分支達到一個穩定點,從develop分支從拉出release分支,將其打包並部署到環境中,進行系統測試。
如果測試過程中,出現bug,在release分支進行bug修復,然後出包再次測試;
該bug確認修復後,將程式碼合入develop分支;
所有測試通過後,將程式碼合入master分支,並在master分支打tag(一般對應版本號)。
本地分支打tag
#切換master分支 git checkout master #本地分支打tag git tag -a 2.0.0 -m 'comments' #本地tag上傳至遠端 git push --tags
本地刪除tag
#本地刪除tag 2.0.0 git tag -d 2.0.0 #刪除遠端tag 2.0.0 git push origin :refs/tags/2.0.0
當釋出完成後,我們可以將遠端的release分支刪除,當然可以保留本地release分支一段時間,防止烏龍事件。
hotfix分支
當已釋出的版本,在執行一段時間後,由於偶然等因素造成bug,需緊急修復,此時從master分支拉出hotfix分支進行bug修復。
當bug修復完成後,將程式碼分別合入develop分支和master分支。
合入master分支後,在master打上新的tag(一般是小版本號)。
新版本上線後,遠端hotfix分支可以刪除,本地hotfix分支可以保留一段時間,防止烏龍事件。
上述內容看完,再回過頭來看最初的分支模型,是否覺得so easy呢~
再次感謝vincent Driessen,本文多處圖片均是參考該篇blog而繪製:A successful Git branching model
作者:吳家二少
部落格地址:https://www.cnblogs.com/cloudman-open/
本文歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文