分支分类
分支主要分为两大类:
- main分支
- supporting分支
Main分支
分为两类:
- master分支:master(trunk)
- release分支:sdk_vx.y_release
Supporting分支
只有一类,Gitlab以feature分支作为提交的基本单位
- feature分支
分支命名规范
master分支
master
release分支
sdk_{version_id}_release
version_id为发布版本号
例:
sdk_v1.2_release
feature分支
feature/{jira_id}/{description}
例:
feature/GESWITCH-333/add_gpio_driver
Tag命名规范
Maintainer在开发的合适阶段在master分支和release分支上打tag。
Release branch Tag
当release分支上的feature全都开发完毕要进入到release candidate 测试阶段(rc测试),打上tag: sdk_{version_id}
例:
sdk_v1.2
RC 测试tag
在release分支上合并修复patch后需要打tag:sdk_{version_id}-rcx
rcx代表第几轮rc测试
例:
sdk_v1.2-rc3
sdk_v1.2.3-rc2
分支关系
- master分支
- 为开发的主干分支
- 所有开发工作提交到次分支
- 由Maintainer创建
- release分支
- 为发布分支
- 提交bugfix(或者feature(尽量少这么做))到此分支
- 如果bugfix(或者feature)在master分支上也需要的话应该首先提交到master分支,再cherry-pick到release分支。(以免master上遗漏这些patch)
- 一般从master分支的某个tag处检出(着急的话直接检出,譬如当前版本的feature未开发完,又需要开发下一个版本),或者也可以从其他release分支上检出
- 由Maintainer创建
- feature分支
- 为提交的基本单元
- 从master分支上检出,合并入master
- 从release分支上检出,合并入release分支
分支、Tag权限
为了防止错误的提交覆盖提交历史,规定所有的remote端创建的分支都开启protected权限,所有提交只能以feature branch的形式,请求merge request。任何直接提交到remote branch上的push请求都会被拒绝。
Maintainer权限职责
- 创建master分支、release分支
- 合并feature分支
- 给master分支和release分支打tag
- 删除feature分支
- 更新版本ChangeLog(进入release阶段后和热修复后)和VERSION(进入release阶段后)文件
Developer权限职责
- 创建local feature分支
- push feature分支到Gitlab仓库
- 发起merge request
- 删除自己push的feature分支
Reviewer权限职责
- 评审feature代码
- 测试feature代码
- 通知Maintainer合并请求
Tester权限职责
- 测试Release分支上的项目
- 反馈Bug给Developer
分支禁止操作
- 禁止删除master分支、release candidate分支
- 禁止直接push提交到Gitlab,所有合并请求都应以feature branch的形式push