一种基于 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源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索