git分支最佳實踐

jopen 9年前發布 | 16K 次閱讀 Git 版本控制系統

本文介紹我一年前在自己的項目(包括工作項目和私人項目)中引入的git分支模式,這個模式很成功。

git分支最佳實踐

主要分支

中央倉庫中有兩個長期的分支:

  • master
  • develop

master用作生產分支,里面的代碼是準備部署到生產環境的。

develop是可交付的開發代碼,也可以看成是用于集成分支,每晚構建從develop獲取代碼。

develop分支中的代碼足夠穩定的時候,就將改動合并到master分支,同時打上一個標簽,標簽的名稱為發布的版本號。

輔助分支

通過輔助分支來幫助并行開發,和主要分支不同,這些分支的生命周期是有限的:

  • 特性分支
  • 發布分支
  • 緊急修復分支

特性分支

特性分支可能從develop分支分出,最終必須合并回develop

特性分支(也叫主題分支)用于開發新特性。每個新特性開一個新分支,最終會合并回develop(當特性開發完畢的時候),或者放棄(如果最終決定不開發這個特性)。

特性分支只存在于開發者的倉庫中。

創建一個特性分支

develop分支分出:

$ git checkout -b myfeature develop

合并回develop

完成的特性需要合并回develop

$ git checkout develop
$ git merge --no-ff myfeature
$ git branch -d myfeature
$ git push origin develop

使用--no-ff確保總是新生成一個提交,避免丟失曾經存在一個特性分支的歷史信息,也能夠方便地看出哪些提交屬于同一個特性。比較:

![merge --no-ff]http://segmentfault.com/img/bVbYDZ

發布分支

發布分支可能從develop分出,最終必須合并回1developmaster。發布分支以release-*的方式命名。

發布分支為新的發布版本作準備,包括一些小bug的修正和發布的元信息(版本號、發布日期等)的添加。這樣develop分支就可以接受針對以后的發布的新特性。

在代碼基本可以發布的時候從develop分支分出發布分支。這時要確保此次發布包括的特性都已經合并到develop分支了(同時,為下一版發布準備的特性不能合并到develop分支,必須等待發布分支分出后才能合并)。

創建發布分支

$ git checkout -b release-1.2 develop
$ ./bump-version.sh 1.2
$ git commit -a -m "Bumped version number to 1.2"

bump-version.sh是一個腳本,修改相應文件的信息,以體現版本號已經改變了。

完成發布分支

當發布分支中的代碼可以發布的時候,將代碼合并到master分支,并打上相應的標簽。同時還需要合并到develop分支,因為發布分支里可能包含一些修正bug的代碼,合并回去可以確保以后的版本也包含這些修正。

$ git checkout master
$ git merge --no-ff release-1.2
$ git tag -a 1.2

$ git checkout develop
$ git merge --no-ff release-1.2

注意,合并回develop分支很可能導致合并沖突,我們需要手工修復一下,然后提交。之后可以刪除發布分支:

$ git branch -d release-1.2 

緊急修復分支

可能從master分出,必須合并回developmaster。分支名以hotfix-*開頭。

緊急修復分支和發布分支很像,只不過它們是意料之外的。如果生產系統里有一個緊急的bug,必須馬上修復的話,我們就從master里分出一個緊急修復分支。

這樣,某個人修復緊急bug的同時,團隊其他成員可以繼續在develop分支上開發。

創建緊急修復分支

$ git checkout -b hotfix-1.2.1 master
$ ./bump-version.sh 1.2.1
$ git commit -a -m "Bumped version number to 1.2.1"

修復bug并提交

$ git commit -m "Fixed severe production problem" 

完成緊急修復分支

修復bug之后,需要合并回master,同時也需要合并回develop

$ git checkout master
$ git merge --no-ff hotfix-1.2.1
$ git tag -a 1.2.1

$ git checkout develop
$ git merge --no-ff hotfix-1.2.1

以上情況假定不存在發布分支。假設存在發布分支的話,代碼不應該合并回develop,而應該合并回發布分支,確保正在準備的發布分支也能收到這個補丁(由于發布分支最終會合并到develop,因此這時不用再另外合并到develop)。

最后,刪除這個緊急修復分支:

$ git branch -d hotfix-1.2.1 

原文 A successful Git branching model
翻譯 SegmentFault

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!