这里按照我们传统的习惯对GitFlow的命名做了修改。
分支分类
Main 分支:
- Develop 分支
- Release 分支
Supporting 分支:
- Feature 分支
- Release candidate分支
- Hotfix 分支
分支命名规范
Develop分支
dev
Release分支
master
Feature分支
以下三种分类方式是对Gitflow的扩展(由于gitlab代码评审是以feature branch为基本操作单元的,所以做了这种扩展,Gitflow中只有Develop Feature这一种feature分支)
Develop Feature分支
feature/{version_id}/{jira_id}/{description}
version_id为该feature想要合入的版本
例:
feature/v1.2/JIRA-333/add_gpio_driver
Release Feature分支
f_release/{version_id}/{jira_id}/{description}
version_id为该feature想要合入的版本
例:
f_release/v1.2/JIRA-345/fix_gpio_driver
Hotfix Feature分支
f_hotfix/{version_id}/{jira_id}/{description}
version_id为hotfix分支的版本号
例:
f_hotfix/v1.2.2/JIRA-348/fix_driver
Release Candidate分支
sdk_{version_id}_rc
version_id为候选发布版本号
例:
sdk_v1.2_rc
Hotfix分支
hotfix_{version_id}
version_id为master分支上下一个修复版本号
例:
# master分支上当前的发布版本为sdk_v1.2.3_release
hotfix_v1.2.4
Tag命名规范
Maintainer在开发的合适阶段在Release Candidate和master分支上打tag。
Release Candidate Tag
从dev分支上检出新的Release Candidate分支后,需要提交ChangeLog和VERSION信息,并打tag: sdk_{version_id}
例:
sdk_v1.2
在Release Candidate分支上合并修复patch后需要打tag:sdk_{version_id}-rcx
例:
sdk_v1.2-rc3
Release Tag
当master分支上合并入Release Candidate分支后打tag:sdk_{version_id}
version_id的修复版本号从“1”开始
例:
sdk_v1.2.1_release
当master分支上合并入Hotfix分支后打tag:sdk_{version_id}
例:
sdk_v1.2.2_release
分支关系
- remote master分支为初始化分支,由Maintainer创建
- remote dev分支从remote master分支检出,由Maintainer创建
- develop feature分支从local dev分支检出,并合并入remote dev分支
- remote release candidate分支从remote dev分支检出,并合并入remote master分支和remote dev分支
- release feature分支从local release candidate分支检出,并合并入remote release candidate分支
- remote hotfix分支从remote master分支检出,合并入remote master分支和remote dev分支(如果release candidate分支正在开发,则不合并入dev分支而合并入remote release candidate分支)
- hotfix feture分支从local hotfix分支检出,并合并入remote hotfix分支
分支、Tag权限
为了防止错误的提交覆盖提交历史,规定所有的remote端创建的分支都开启protected权限,所有提交只能以feature branch的形式,请求merge request。任何直接提交到remote branch上的push请求都会被拒绝。
Maintainer权限职责
- 创建master分支、dev分支、release candidate分支、hotfix分支
- 合并feature分支、release candidate分支、hotfix分支
- 给release candidate分支打tag,给master分支打tag
- 删除feature分支
- 更新版本ChangeLog(进入release candidate后和hotfix merge后)和VERSION(进入release candidate后)文件
Developer权限职责
- 创建local feature分支
- push feature分支到Gitlab仓库
- 发起merge request
- 删除自己push的feature分支
Reviewer权限职责
- 评审feature代码
- 测试feature代码
- 通知Maintainer合并请求
Tester权限职责
- 测试Release Candidate分支上的项目
- 反馈Bug给Developer
分支禁止操作
- 禁止删除master分支、dev分支、release candidate分支
- 禁止直接push提交到Gitlab,所有合并请求都应以feature branch的形式push