一種基於 gitlab 的適用於版本發佈的 git-flow 協做規範

最近本身搞了一個基於 gitlab 的適用於版本發佈(非持續集成)的脫胎於 git-flow 的協做規範,發佈出來你們能夠做爲借鑑。git

Branch 規範

一共擁有如下幾個(種)branch:性能優化

  1. master:master 上的都是 production-ready 的 stable 的代碼。bash

  2. develop:做爲開發的主分支,全部的 mr 都應當(先)合併到 develop 分支,按期 merge 到 master 發版。微信

  3. release-*:LTS 版本須要有獨立的 branch,以做爲後續(萬一)hotfix 使用,精確到 minor version,如 release-v1.2,爲長期保留的分支。app

  4. feature/*:全部新的 feature(如新功能、性能優化)都應當先 checkout 到一個新的 feature 分支開發,原則上必須且只能 merge 到 develop 分支。gitlab

  5. bugfix/*:bug 的修復分支,原則上必須且只能 merge 到 develop 分支。性能

  6. test/*:test 分支主要作如下三件事:1. 增長 unit test;2. 修改倉庫級別配置文件(如 .gitlab-ci.yml);3. 用來承載一些一次性的測試(不合入 develop)。測試

  7. hotfix/*:用來發布 hotfix 的分支,詳見下節。優化

  8. release/*:用來作發版工做(如更新版本號,bugfix)的分支,還有一個做用是 freeze feature,不容許合入 feature,能夠合入 bugfix,詳見下節。spa


branch name 應當採用 下劃線命名法。會在 ci 中對於 branch name 作強制檢查,若是不合規會直接 fail。留出 test/* 的 branch 也是爲了可以支持一些測試性的工做可以經過 ci 檢查。

協做流程

開發流程

一、首先,確認本身在 develop 分支上;

二、git checkout -b feature/your_feature

三、開發完成後,push 到 origin;

四、提 mr(若是是 性能優化,請在 description 中附帶上 benchcmp 的結果),target branch 爲 develop,並勾選最下方兩個選項:



五、等待 review 經過,經過後點擊 merge,請再次確認 squash 和 delete branch 被勾選:
image-20191106172100840
六、若是 merge request 有 description,能夠點擊 「Modify commit message」 並點擊最下方的 include description,而後再點擊 merge:
image-20191106172136296
七、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/* 上 bugfix

這裏不須要直接 merge 回 develop 是由於 release/* 最終會 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 分支上(待修復的分支);
  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 分支上,打一個 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,** 不勾選 squash 和 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,** 不勾選 squash,勾選 remove source branch**;
  10. 等待 review 經過,經過後點擊 merge,再次確認不勾選 squash,但 delete branch 勾選
  11. 若是 merge request 有 description,能夠點擊 「Modify commit message」 並點擊最下方的 include description,而後再點擊 merge;
  12. done。

CI check script

#!/usr/bin/env bash
echo "branch name is: $1"if [[ ! $1 =~ ^(((feature|bugfix|test|hotfix)/.+)|(master|develop)|(release-v[0-9]+\.[0-9]+)|(release/v[0-9]+\.[0-9]+\.[0-9]+(-[a-z0-9.]+(\+[a-z0-9.]+)?)?))$ ]]; then echo "branch name invalid!" >&2 exit 1fi


原文連接:

https://www.purewhite.io/2019/11/06/new-gitlab-git-flow-spec/


END

Kubernetes CKA實戰培訓班推薦:

北京:12月18-20日


本文分享自微信公衆號 - K8S中文社區(k8schina)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索