[正式項目]Gitlab/Github分支管理規(guī)范

如需引用請注明出處 WeiFong

1.總則

本文件用于確認(rèn)技術(shù)部門Gitlab分支規(guī)范。

2.說明

本文件主要參考gitflow規(guī)范

3 分支說明

image.png

工作流使用2個分支來記錄項目的歷史:master,develop。master分支存儲了正式發(fā)布的歷史,而develop分支作為功能的集成分支。feature-*分支用于不同項目的開發(fā)。


image.png

3.1 master分支:

存儲了正式發(fā)布的歷史。(所有提交分配版本號)。master分支上的所有提交均分配一個版本號。

3.2 develop分支:

作為功能的集成分支,集中feature-,hotfix-相關(guān)更新。也從develop分出新的feature分支。

3.3 feature分支(功能開發(fā)分支)

每個新功能位于一個自己的分支,這樣可以push到中央倉庫以備份和協(xié)作。但功能分支不是從master分支上拉出新分支,而是使用develop分支作為父分支。當(dāng)新功能完成時,合并回develop分支。

新功能提交應(yīng)該從不直接與master分支交互。

3.4 Release分支

develop分支上有了做一次發(fā)布(或者說快到了既定的發(fā)布日)的足夠功能,就從develop分支上fork一個發(fā)布分支。新建的分支用于開始發(fā)布循環(huán),所以從這個時間點(diǎn)開始之后新的功能不能再加到這個分支上。這個分支只應(yīng)該做Bug修復(fù)、文檔生成和其它面向發(fā)布任務(wù)。

一旦對外發(fā)布的工作都完成了,發(fā)布分支合并到master分支并分配一個版本號打好Tag。另外,這些從新建發(fā)布分支以來的做的修改要合并回develop分支。

使用一個用于發(fā)布準(zhǔn)備的專門分支,使得一個團(tuán)隊可以在完善當(dāng)前的發(fā)布版本的同時,另一個團(tuán)隊可以繼續(xù)開發(fā)下個版本的功能。

這也打造定義良好的開發(fā)階段(比如,可以很輕松地說,“這周我們要做準(zhǔn)備發(fā)布版本4.0”,并且在倉庫的目錄結(jié)構(gòu)中可以實(shí)際看到)。

3.5 維護(hù)分支或說是熱修復(fù)(hotfix)

用于生成快速給產(chǎn)品發(fā)布版本(production releases)打補(bǔ)丁,這是唯一可以直接從master分支fork出來的分支。修復(fù)完成,修改應(yīng)該馬上合并回master分支和develop分支(當(dāng)前的發(fā)布分支),master分支應(yīng)該用新的版本號打好Tag。

4 操作:

4.1 創(chuàng)建開發(fā)分支(僅首次)

第一步為master分支配套一個develop分支。簡單來做可以本地創(chuàng)建一個空的develop分支,push到服務(wù)器上:

git branch develop                # 創(chuàng)建一個develop分支
git push -u origin develop        # 將本地的develop分支推送到origin主機(jī)

以后這個分支將會包含了項目的全部歷史,而master分支將只包含了部分歷史。

4.2 Clone代碼

其它開發(fā)者這時應(yīng)該克隆中央倉庫,建好develop分支的跟蹤分支:

git clone ssh://user@host/path/to/repo.git   # clone gitlab代碼
git checkout -b develop origin/develop

現(xiàn)在每個開發(fā)都有了這些歷史分支的本地拷貝。

4.3 新功能開發(fā)

開始開發(fā)新功能

  • image.png

示例中,開發(fā)人員負(fù)責(zé)0.0.1和0.1.0功能的開發(fā)。需要為各自的功能創(chuàng)建相應(yīng)的分支。新分支不是基于master分支,而是應(yīng)該基于develop分支:

git checkout -b feature-0.0.1 develop     # 從develop切出feature-0.0.1分支,并進(jìn)入新分支

他們用老套路添加提交到各自功能分支上:編輯、暫存、提交:

git status                     # 查看當(dāng)前git狀態(tài)
git add                        # 將文件從工作區(qū)提交到暫存區(qū)
git commit                     # 將本地暫存區(qū)的文件提交到本地版本庫

4.4 代碼feature-0.0.1功能開發(fā)

  • image.png
git pull origin develop            # 拉取代碼庫代碼,確保develop分支是最新
git checkout develop               # 切換到develop分支
git merge feature-0.0.1            # 將feature-0.0.1合并到當(dāng)前分支(develop)
git push                           # 將代碼推動到代碼倉庫
git branch -d feature-0.0.1        # 刪除feature-0.0.1分支

注意,功能決不應(yīng)該直接合并到master分支。

4.5 版本0.0.1準(zhǔn)備發(fā)布

  • image.png

這個時候0.1.0正在繼續(xù)開發(fā),0.0.1開始準(zhǔn)備項目正式發(fā)布。像功能開發(fā)一樣,用一個新的分支來做發(fā)布準(zhǔn)備。這一步也確定了發(fā)布的版本號:

git checkout -b release-0.0.1 develop       # 從develop切出 release-0.0.1 分支,并進(jìn)入新分支

這個分支是清理發(fā)布、執(zhí)行所有測試、更新文檔和其它為下個發(fā)布做準(zhǔn)備操作的地方,像是一個專門用于改善發(fā)布的功能分支。

根據(jù)測試需要,在該分支上打出AT1的tag,用以標(biāo)識第1次測試。如果需要進(jìn)行bug修復(fù),則通過hotfix進(jìn)行修復(fù)后,打出AT2的tag。

4.6 完成版本0.0.1功能發(fā)布

  • image.png

一旦準(zhǔn)備好了對外發(fā)布,合并release-0.0.1及其修改到master分支和develop分支上,刪除release-0.0.1分支。合并回develop分支很重要,因?yàn)樵诎l(fā)布分支中已經(jīng)提交的更新需要在后面的新功能中也要是可用的。

如果團(tuán)隊要進(jìn)行Code Review,這是發(fā)起Pull Request的理想時機(jī)。

git checkout master          # 切換到master分支
git merge release-0.1        # 將release-0.0.1合并到當(dāng)前分支(master)
git push                     # 將代碼推動到代碼倉庫

git checkout develop          # 切換到develop分支
git merge release-0.1         # 將release-0.0.1合并到當(dāng)前分支(develop)
git push                      # 將代碼推動到代碼倉庫

發(fā)布分支是作為功能開發(fā)(develop分支)和對外發(fā)布(master分支)間的緩沖。只要有合并到master分支,就應(yīng)該打好Tag以方便跟蹤。

git tag -a 0.0.1 -m "Version 0.0.1 publish" master        # 給master打上0.0.1的標(biāo)簽,并加上標(biāo)簽說明`
git push –tags                                            # 將本地標(biāo)簽推動到代碼倉庫

Git有提供各種勾子(hook),即倉庫有事件發(fā)生時觸發(fā)執(zhí)行的腳本??梢耘渲靡粋€勾子,在你push中央倉庫的master分支時,自動構(gòu)建好對外發(fā)布。

4.7 用戶發(fā)現(xiàn)0.0.1版本Bug

  • image.png

對外發(fā)布后,用戶提出當(dāng)前版本的一個Bug。為了立即處理Bug,從master分支上拉出了一個hotfix維護(hù)分支,提交修改以解決問題,然后直接合并回master分支:

git checkout -b hotfix-0.0.1 master          # 從develop切出 release-0.0.1 分支,并進(jìn)入新分支

  • Bug修復(fù)后
git checkout master            # 切換到master分支
git merge hotfix-0.0.1         # 將hotfix-0.0.1合并到當(dāng)前分支(master)
git push                       # 將代碼推動到代碼倉庫

  • bug修復(fù)后的修改需要合并到develop分支中
git checkout develop             # 切換到develop分支
git merge hotfix-0.0.1          # 將hotfix-0.0.1合并到當(dāng)前分支(develop)
git push                         # 將代碼推動到代碼倉庫
git branch -d hotfix-0.0.1      # 刪除hotfix-0.0.1分支

  • bug修復(fù)后,master需要增加tag標(biāo)簽(版本號第三位數(shù)字+1)
git tag -a 0.0.2 -m "Version 0.0.1 bug repair" master       # 給master打上0.0.2的標(biāo)簽,并加上標(biāo)簽說明`
git push –tags                                              # 將本地標(biāo)簽推動到代碼倉庫

補(bǔ)充

1.原dev_*分支逐步改為feature-*分支
2.原test分支逐步改為release-*分支
3.項目版本信息在項目初始階段提供

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容