如需引用請注明出處 WeiFong
1.總則
本文件用于確認(rèn)技術(shù)部門Gitlab分支規(guī)范。
2.說明
本文件主要參考gitflow規(guī)范
3 分支說明

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

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.項目版本信息在項目初始階段提供




