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

如需引用請(qǐng)注明出處 WeiFong

1.總則

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

2.說(shuō)明

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

3 分支說(shuō)明

image.png

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


image.png

3.1 master分支:

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

3.2 develop分支:

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

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

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

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

3.4 Release分支

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

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

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

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

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

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

4 操作:

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

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

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

以后這個(gè)分支將會(huì)包含了項(xiàng)目的全部歷史,而master分支將只包含了部分歷史。

4.2 Clone代碼

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

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

現(xiàn)在每個(gè)開發(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ū)的文件提交到本地版本庫(kù)

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

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

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

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

  • image.png

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

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

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

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

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

  • image.png

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

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

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

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

發(fā)布分支是作為功能開發(fā)(develop分支)和對(duì)外發(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)簽說(shuō)明`
git push –tags                                            # 將本地標(biāo)簽推動(dòng)到代碼倉(cāng)庫(kù)

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

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

  • image.png

對(duì)外發(fā)布后,用戶提出當(dāng)前版本的一個(gè)Bug。為了立即處理Bug,從master分支上拉出了一個(gè)hotfix維護(hù)分支,提交修改以解決問(wèn)題,然后直接合并回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                       # 將代碼推動(dòng)到代碼倉(cāng)庫(kù)

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

  • bug修復(fù)后,master需要增加tag標(biāo)簽(版本號(hà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)簽說(shuō)明`
git push –tags                                              # 將本地標(biāo)簽推動(dòng)到代碼倉(cāng)庫(kù)

補(bǔ)充

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

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

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