Git 版本管理规范
目录
解决的问题
- 新功能未经测试直接上线,导致生产事故
- 紧急更新时,提交未完成的功能代码
- 代码审查、测试流程缺失造成的
质量失控
分支策略
分支类型 | 命名规范 | 生命周期 | 说明 |
---|---|---|---|
主分支 | master | 永久 | 生产环境对应分支,仅接受release分支合并 |
开发分支 | develop | 永久 | 集成分支,所有功能开发完成后的统一合并点,相当于所有人最新的开发版本 |
功能分支 非必要 | feature/YYYYMMDD_名称 | 功能开发期间 | 单个功能开发隔离环境,多人协作且工时超过1天 的功能全部要拉feature 分支出来写,写完以后合并到develop 分支中 |
测试分支 | release/版本号 | 测试阶段 | 测试专用分支,测试通过后合并到master |
修复分支 很少用 | fix/YYYYMMDD_问题简述 | Bug修复期间 | 紧急生产问题修复 |
维护流程:
flowchart TD
A([Start]) --> B{新功能是否需要加feature分支?\n需要满足:\n1. 多人协作\n2. 工时>1天}
B -->|是| C[从develop创建feature-xxx分支]
B -->|否| D[直接在develop分支开发]
C --> E[开发新功能]
D --> F[开发新功能]
E --> G[自测完毕]
F --> G
G --> H[在codeup上提交合并到develop分支 见操作1]
H --> I[develop分支联调]
I --> J{联调是否通过?}
J -->|是| K[合并到release分支]
J -->|否| I
K --> L[执行测试]
L --> M{测试是否通过?}
M -->|是| N[在release分支打Tag 并提交发行版 见操作2 合并到master分支 操作3]
M -->|否| L
N --> O[开始下个版本迭代]
O --> P([End])
操作1:在codeup上提交合并请求,到develop分支
操作2:如何给分支打tag,建立发行版:如何管理发行版_云效(Alibaba Cloud DevOps)-阿里云帮助中心
注意: 发行版和tag的标签不能写一样,否则后面提交代码会报错,最好是tag写v1.0.0,发行版名称为:正式版v1.0.0
操作3::如果是release合并到master分支,跟上述操作一样,只是目标这里换成了master分支,来源换成release分支
版本号规范
采用 语义化版本 2.0.0 规范:
主版本号.次版本号.修订号[-先行版本号]
- 主版本号:不兼容的API修改
- 次版本号:向下兼容的功能新增
- 修订号:问题修复
- 先行版本号:预发布版本标识(如alpha/beta)
示例:
v1.0.0 # 正式发布
v2.1.4-beta.1 # 测试版本
v3.0.0-rc.2 # 候选版本
操作规范
功能开发流程
-
判定这个新功能是否满足两个条件:
1.多人协作
2.工时超过1天
,如果满足这两个条件就一定要创建功能分支处理,否则就直接在dev分支写。 -
从develop分支创建功能分支
git checkout -b feature/20220708_login develop
-
本地开发并定期提交
-
推送远程仓库
git push origin feature/20220708_login
-
在codeup上发起Merge Request到develop分支
-
代码审查通过后合并
紧急修复流程【很少用】
-
从master创建修复分支
git checkout -b fix/20220708_login_captcha master
-
修复完成后创建对应测试分支
-
通过测试后合并到master和develop
分支清理规则
分支类型 | 清理条件 |
---|---|
功能分支 | 合并到develop后立即删除 |
测试分支 | 版本发布后保留7天 |
修复分支 | 合并到master后立即删除 |
发布流程
-
从develop创建release分支
git checkout -b release/v1.2.0 develop
-
进行系统测试
-
测试通过后合并到master
git checkout master git merge --no-ff release/v1.2.0 git tag -a v1.2.0 -m "正式发布版本v1.2.0"
-
同步到develop分支
git checkout develop git merge --no-ff release/v1.2.0
写在最后
这一套是项目负责人和开发组长要搞懂的,一线员工实在玩不懂,就把develop分支当主分支开发就行了。