慢慢的公司內部的項目逐漸增多,並且前期項目的版本發佈相對來說比較頻繁,爲了更新好的進行團隊開發,定義了一套使用與版本發佈的git-flow協作規範,大家可以借鑑一下。
分支規範
一共擁有以下幾個(種)branch:
- master:master 上的都是 production-ready 的 stable 的代碼。
- develop:作爲開發的主分支, 所有的mr操作都應該先合併到develop分支,再定期 merge 到 master 發版。
- release-xxx:LTS 版本需要有獨立的 branch,以作爲後續(萬一)hotfix 使用,精確到 minor version,如 release-v1.2,爲長期保留的分支。
- feature/xxx:所有新的 feature(如新功能、性能優化)都應當先 checkout 到一個新的 feature 分支開發,原則上必須且只能 merge 到 develop 分支。
- bugfix/xxx:bug 的修復分支,原則上必須且只能 merge 到 develop 分支。
- test/xxx:test 分支主要做以下三件事:1. 增加 unit test;2. 修改倉庫級別配置文件(如 .gitlab-ci.yml);3. 用來承載一些一次性的測試(不合入 develop)。
- hotfix/xxx:用來發布 hotfix 的分支,詳見下節。
- release/xxx:用來做發版工作(如更新版本號,bugfix)的分支,還有一個作用是 freeze feature, 不允許何如feature,只允許何如bugfix。
協作流程
開發流程
-
首先,確認自己在 develop 分支上,基於開發分支切一個功能分支出來;
-
git checkout -b feature/your_feature
; -
開發完成後,push 到 origin;
-
提 mr(如果是 性能優化,請在 description 中附帶上 benchcmp 的結果),target branch 爲 develop,並勾選最下方兩個選項:
5. 等待 review 通過,通過後點擊 merge,請再次確認 squash 和 delete branch 被勾選:
6. 如果 merge request 有 description,可以點擊 “Modify commit message” 並點擊最下方的 include description,然後再點擊 merge:
7.done(完成)
bugfix流程
develop上的bugfix
- 首先,確認自己在develop分支上;
git checkout -b bugfix/your_bugfix
;- 開發完成後,push 到 origin;
- 提 mr,target branch 爲 develop,並如開發流程一樣勾選最下方兩個選項;
- 等待 review 通過,通過後點擊 merge,請再次確認 squash 和 delete branch 被勾選;
- 如果 merge request 有 description,可以點擊 “Modify commit message” 並點擊最下方的 include description,然後再點擊 merge;
- done。
release/xxx 上的bugfix
這裏不需要直接 merge 回 develop 是因爲 release/xxx 最終會 merge 回 develop。
-
首先,確認自己在 release/vX.Y.Z 分支上;
-
git checkout -b bugfix/your_bugfix
; -
開發完成後,push 到 origin;
-
提 mr,target branch 爲 release/vX.Y.Z,並如開發流程一樣勾選最下方兩個選項;
-
等待 review 通過,通過後點擊 merge,請再次確認 squash 和 delete branch 被勾選;
-
如果 merge request 有 description,可以點擊 “Modify commit message” 並點擊最下方的 include description,然後再點擊 merge;
-
done。
hotfix 流程
需要 merge 到 develop
- 按照 普通 bugfix 流程 完成 bug 修復,記得要更新代碼中的版本號(爲了防止 merge 到 master 後忘記 merge 回 develop);
- 切換到 master 分支上;
git checkout -b hotfix/your_hotfix
;- cherry-pick bugfix 的 commit;
- 檢查無誤後,push 到 origin;
- 提 mr,target branch 爲 master,並如開發流程一樣勾選最下方兩個選項;
- 等待 review 通過,通過後點擊 merge,請再次確認 squash 和 delete branch 被勾選;
- 如果 merge request 有 description,可以點擊 “Modify commit message” 並點擊最下方的 include description,然後再點擊 merge;
- 切換到 master 分支上,打一個新的 tag;
- done。
僅需要 merge 到 master
適用於需要修復的 bug 在 develop 分支上已不存在的情況。
版本號的更新不需要同步到 develop,在下次 merge 的時候解決衝突即可。
- 首先,確認自己在 master 分支上;
git checkout -b hotfix/your_hotfix
;- 修復完成後,新增一個獨立的commit,更新代碼中的版本號,push 到 origin;
- 提 mr,target branch 爲 master,並如開發流程一樣勾選最下方兩個選項;
- 等待 review 通過,通過後點擊 merge,請再次確認 squash 和 delete branch 被勾選;
- 如果 merge request 有 description,可以點擊 “Modify commit message” 並點擊最下方的 include description,然後再點擊 merge;
- 切換到 master 分支上,打一個新的 tag;
- 將第三步中更新版本號的獨立的 commit cherry-pick 到 develop 分支上;
- done。
需要 merge 到 LTS release branch
- 根據情況,完成需要 merge 到 develop 或者僅需要 merge 到 master 中的一個;
- 切換到 release-vX.Y.Z 分支上(待修復的分支);
git checkout -b hotfix/your_hotfix
;- cherry-pick hotfix 的 commit;
- 更新代碼中版本號,檢查無誤後,push 到 origin;
- 提 mr,target branch 爲 release-vX.Y,並如開發流程一樣勾選最下方兩個選項;
- 等待 review 通過,通過後點擊 merge,請再次確認 squash 和 delete branch 被勾選;
- 如果 merge request 有 description,可以點擊 “Modify commit message” 並點擊最下方的 include description,然後再點擊 merge;
- 切換到 release-vX.Y.Z 分支上,打一個 tag;
- done。
發版流程
發版流程比較特殊,和其它流程有較大區別,請注意細節。
這麼做的原因是,如果先把 release branch merge 到 develop 分支上,再將 develop 分支 merge 進 master 的話,可能會帶上預料之外的 commit(在整理 release 的時候有新的 mr 被 merge 到 develop)。
- 首先,確認自己在 develop 分支上;
git checkout -b release/vX.Y.Z
;- 做一些發版需要的工作(如更新版本號等);
- 完成後,push 到 origin;
- 提 mr,target branch 爲 master,不勾選suqash和remove source branch;
- 等待 review 通過,通過後點擊 merge,請再次確認squash和delete branch未被勾選;
- 如果 merge request 有 description,可以點擊 “Modify commit message” 並點擊最下方的 include description,然後再點擊 merge;
- 切換到 master,打一個 vX.Y.Z 的 tag。
- 再提一個 mr,target branch 爲 develop,不勾選suqash和remove source branch;
- 等待 review 通過,通過後點擊 merge,請再次確認squash和delete branch未被勾選;
- 如果 merge request 有 description,可以點擊 “Modify commit message” 並點擊最下方的 include description,然後再點擊 merge;
- done。