最近本身搞了一個基於 gitlab 的適用於版本發佈(非持續集成)的脫胎於 git-flow 的協做規範,發佈出來你們能夠做爲借鑑。git
Branch 規範
一共擁有如下幾個(種)branch:性能優化
master:master 上的都是 production-ready 的 stable 的代碼。bash
develop:做爲開發的主分支,全部的 mr 都應當(先)合併到 develop 分支,按期 merge 到 master 發版。微信
release-*:LTS 版本須要有獨立的 branch,以做爲後續(萬一)hotfix 使用,精確到 minor version,如 release-v1.2,爲長期保留的分支。app
feature/*:全部新的 feature(如新功能、性能優化)都應當先 checkout 到一個新的 feature 分支開發,原則上必須且只能 merge 到 develop 分支。gitlab
bugfix/*:bug 的修復分支,原則上必須且只能 merge 到 develop 分支。性能
test/*:test 分支主要作如下三件事:1. 增長 unit test;2. 修改倉庫級別配置文件(如 .gitlab-ci.yml);3. 用來承載一些一次性的測試(不合入 develop)。測試
hotfix/*:用來發布 hotfix 的分支,詳見下節。優化
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,並勾選最下方兩個選項:
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
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/* 上 bugfix
這裏不須要直接 merge 回 develop 是由於 release/* 最終會 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 分支上(待修復的分支); -
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 分支上,打一個 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,** 不勾選 squash 和 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,** 不勾選 squash,勾選 remove source branch**; -
等待 review 經過,經過後點擊 merge,再次確認不勾選 squash,但 delete branch 被勾選; -
若是 merge request 有 description,能夠點擊 「Modify commit message」 並點擊最下方的 include description,而後再點擊 merge; -
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/
![](http://static.javashuo.com/static/loading.gif)
本文分享自微信公衆號 - K8S中文社區(k8schina)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。