公司開發基於gitlab適用於版本發佈的git-flow寫協作規範

慢慢的公司內部的項目逐漸增多,並且前期項目的版本發佈相對來說比較頻繁,爲了更新好的進行團隊開發,定義了一套使用與版本發佈的git-flow協作規範,大家可以借鑑一下。

分支規範

一共擁有以下幾個(種)branch:

  1. master:master 上的都是 production-ready 的 stable 的代碼。
  2. develop:作爲開發的主分支, 所有的mr操作都應該先合併到develop分支,再定期 merge 到 master 發版。
  3. release-xxx:LTS 版本需要有獨立的 branch,以作爲後續(萬一)hotfix 使用,精確到 minor version,如 release-v1.2,爲長期保留的分支。
  4. feature/xxx:所有新的 feature(如新功能、性能優化)都應當先 checkout 到一個新的 feature 分支開發,原則上必須且只能 merge 到 develop 分支。
  5. bugfix/xxx:bug 的修復分支,原則上必須且只能 merge 到 develop 分支。
  6. test/xxx:test 分支主要做以下三件事:1. 增加 unit test;2. 修改倉庫級別配置文件(如 .gitlab-ci.yml);3. 用來承載一些一次性的測試(不合入 develop)。
  7. hotfix/xxx:用來發布 hotfix 的分支,詳見下節。
  8. release/xxx:用來做發版工作(如更新版本號,bugfix)的分支,還有一個作用是 freeze feature, 不允許何如feature,只允許何如bugfix。

協作流程

開發流程

  1. 首先,確認自己在 develop 分支上,基於開發分支切一個功能分支出來;

  2. git checkout -b feature/your_feature

  3. 開發完成後,push 到 origin;

  4. 提 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

  1. 首先,確認自己在develop分支上;
  2. git checkout -b bugfix/your_bugfix
  3. 開發完成後,push 到 origin;
  4. 提 mr,target branch 爲 develop,並如開發流程一樣勾選最下方兩個選項;
  5. 等待 review 通過,通過後點擊 merge,請再次確認 squash 和 delete branch 被勾選;
  6. 如果 merge request 有 description,可以點擊 “Modify commit message” 並點擊最下方的 include description,然後再點擊 merge;
  7. done。

release/xxx 上的bugfix

這裏不需要直接 merge 回 develop 是因爲 release/xxx 最終會 merge 回 develop。

  1. 首先,確認自己在 release/vX.Y.Z 分支上;

  2. git checkout -b bugfix/your_bugfix

  3. 開發完成後,push 到 origin;

  4. 提 mr,target branch 爲 release/vX.Y.Z,並如開發流程一樣勾選最下方兩個選項;

  5. 等待 review 通過,通過後點擊 merge,請再次確認 squash 和 delete branch 被勾選;

  6. 如果 merge request 有 description,可以點擊 “Modify commit message” 並點擊最下方的 include description,然後再點擊 merge;

  7. done。

hotfix 流程

需要 merge 到 develop

  1. 按照 普通 bugfix 流程 完成 bug 修復,記得要更新代碼中的版本號(爲了防止 merge 到 master 後忘記 merge 回 develop);
  2. 切換到 master 分支上;
  3. git checkout -b hotfix/your_hotfix
  4. cherry-pick bugfix 的 commit;
  5. 檢查無誤後,push 到 origin;
  6. 提 mr,target branch 爲 master,並如開發流程一樣勾選最下方兩個選項;
  7. 等待 review 通過,通過後點擊 merge,請再次確認 squash 和 delete branch 被勾選;
  8. 如果 merge request 有 description,可以點擊 “Modify commit message” 並點擊最下方的 include description,然後再點擊 merge;
  9. 切換到 master 分支上,打一個新的 tag;
  10. done。

僅需要 merge 到 master

適用於需要修復的 bug 在 develop 分支上已不存在的情況。

版本號的更新不需要同步到 develop,在下次 merge 的時候解決衝突即可。

  1. 首先,確認自己在 master 分支上;
  2. git checkout -b hotfix/your_hotfix
  3. 修復完成後,新增一個獨立的commit,更新代碼中的版本號,push 到 origin;
  4. 提 mr,target branch 爲 master,並如開發流程一樣勾選最下方兩個選項;
  5. 等待 review 通過,通過後點擊 merge,請再次確認 squash 和 delete branch 被勾選;
  6. 如果 merge request 有 description,可以點擊 “Modify commit message” 並點擊最下方的 include description,然後再點擊 merge;
  7. 切換到 master 分支上,打一個新的 tag;
  8. 將第三步中更新版本號的獨立的 commit cherry-pick 到 develop 分支上;
  9. done。

需要 merge 到 LTS release branch

  1. 根據情況,完成需要 merge 到 develop 或者僅需要 merge 到 master 中的一個;
  2. 切換到 release-vX.Y.Z 分支上(待修復的分支);
  3. git checkout -b hotfix/your_hotfix
  4. cherry-pick hotfix 的 commit;
  5. 更新代碼中版本號,檢查無誤後,push 到 origin;
  6. 提 mr,target branch 爲 release-vX.Y,並如開發流程一樣勾選最下方兩個選項;
  7. 等待 review 通過,通過後點擊 merge,請再次確認 squash 和 delete branch 被勾選;
  8. 如果 merge request 有 description,可以點擊 “Modify commit message” 並點擊最下方的 include description,然後再點擊 merge;
  9. 切換到 release-vX.Y.Z 分支上,打一個 tag;
  10. done。

發版流程

發版流程比較特殊,和其它流程有較大區別,請注意細節。

這麼做的原因是,如果先把 release branch merge 到 develop 分支上,再將 develop 分支 merge 進 master 的話,可能會帶上預料之外的 commit(在整理 release 的時候有新的 mr 被 merge 到 develop)。

  1. 首先,確認自己在 develop 分支上;
  2. git checkout -b release/vX.Y.Z
  3. 做一些發版需要的工作(如更新版本號等);
  4. 完成後,push 到 origin;
  5. 提 mr,target branch 爲 master,不勾選suqash和remove source branch
  6. 等待 review 通過,通過後點擊 merge,請再次確認squash和delete branch未被勾選;
  7. 如果 merge request 有 description,可以點擊 “Modify commit message” 並點擊最下方的 include description,然後再點擊 merge;
  8. 切換到 master,打一個 vX.Y.Z 的 tag。
  9. 再提一個 mr,target branch 爲 develop,不勾選suqash和remove source branch
  10. 等待 review 通過,通過後點擊 merge,請再次確認squash和delete branch未被勾選;
  11. 如果 merge request 有 description,可以點擊 “Modify commit message” 並點擊最下方的 include description,然後再點擊 merge;
  12. done。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章