代码分支定义规则
release
发版分支,只允许合并分支不允许提交代码。所有任何需求上线必须使用release,上线前的测试回归只能使用release回归。UAT环境部署必须使用release分支。
master
线上稳定版本代码分支,不允许任何人提交代码到master,只允许合并release的代码过来。release上线观察一两天确保稳定没大问题后合并到master。
test
测试环境共用的代码分支,只允许合并分支不允许提交代码。代码在各自需求的开发分支开发好后再合并过来test分支提测。该分支代码只允许进,不允许出。
dev
开发环境共用的代码分支,只允许合并分支不允许提交代码。代码在各自需求的开发分支开发好后再合并过来dev分支联调。该分支代码只允许进,不允许出。
feat_{yymmdd}_{tapdId}_{var}
产品业务需求的开发分支,基于master分支拉取。{yymmdd}为6位数的年月日,是 评审需求时约定的期望上线时间,{tapdId}为tapd上的ID, {var}为自定义的参数,可不填。基于本规则,一个tapd需求对应一个开发分支。
fix_{yymmdd}_{tapdId}_{var}
线上问题修复的分支,基于master分支拉取。{yymmdd}为6位数的年月日,是约定的期望上线时间,{tapdId}为tapd上的ID, {var}为自定义的参数,可不填。基于本规则,一个tapd需求对应一个开发分支。
opt_{yymmdd}_{tapdId}_{var}
技术侧优化需求的开发分支,基于master分支拉取。{yymmdd}为6位数的年月日,是约定的期望上线时间,{tapdId}为tapd上的ID, {var}为自定义的参数,可不填。基于本规则,一个tapd需求对应一个开发分支。
常规需求开发中各类型分支之间代码流转如图
代码合并
- 如果合并代码时出现不可编译的异常,则从对应的聚合分支拉fix分支出来修复再合并过去。
- 在开发分支开发过程中,大家务必保持每天都合一次master分支的代码至当前开发分支,防止开发分支代码落后太多导致合并上线时冲突太多、合并难度太大。
- gitlab上提交合并请求时别勾选“Delete source branch when merge request is accepted.” ,保留原分支。
- 开发分支只允许合并master分支代码,不允许合并任何其他分支代码。
- 开发分支合并到聚合分支,解决冲突应该这么操作: 假如开发分支是aaa,需要merge到test分支去。 步骤如下 1.基于开发分支aaa拉一个临时分支temp。2.将临时分支temp合并到聚合分支test。3.有冲突时,依据gitlab提示解决即可(gitlab的解决步骤就是先合并test到temp,然后再合并temp到test,就是在临时分支解决冲突再合过去聚合分支test)。以上三步全程在gitlab上界面操作,这样可以确保开发分支代码是干净的,不会合并到聚合分支的其他需求代码。
- 理论上代码在release又还没上生产的时间是UAT集成回归时间,时间跨度一般为一两天。如果这一两天时间内有线上bug需要紧急修复且要紧急上线,等不了release的常规发版时间。则规则如下:首先从master分支拉取fix分支用来修复bug,fix分支改好后先合到release分支,然后再使用fix分支发版。同时,release分支需要重新打包上UAT。以免release分支的包代码落后。
- 注意:所有发版需求,都需先合到release再发版。合release应该先基于开发分支拉取一个releasetemp分支,然后再使用releasetemp合并到release分支。release和master的合并请勿使用temp操作。
- 所有的发版需求,都需要检查打包之后到正式操作发版的时间区间,release是否有新的代码提交。如有新的代码提交合并,务必确认清楚这批新的代码是否要上线,如果需要则需要重新打包。
- 提测时,需合一次master的代码到开发分支再提测,保证代码不要落后线上分支。
- 不小心合错了还没到发版时间的分支代码到release分支咋办?revert一下即可。下次想发版的时候发现分支代码合不过去了,咋办?对你上次的revert再执行一次revert即可。参考:https://blog.csdn.net/cxn945/article/details/48372327
(TODO:发版系统部署UAT和生产时写死release分支,不允许修改。测试环境固定test、开发环境固定dev)
bugfix紧急上线
CHANGELOG
代码里应该维护一个Markdown格式的CHANGELOG,每次上线时记录清楚变更。
服务版本管理人
拥有将代码合并到master和release分支的权限。项目进UAT和上线时,需要去gitlab上发起申请合并请求,由版本管理人审批review后合并代码到release分支。
上线成功后,观察一段时间(至少一天),版本管理人合并release的最新稳定代码至master。如果一天内服务又发生二次发布,则观察时间顺延一天。
Git代码提交规范
在tapd的右上角,有个链接图标,可以复制到源码提交关键字。Git提交时使用该源码关键字提交,这源码关键字包含了tapd的id,务必确保按照规范提交,否则影响脚本自动检查代码是否有遗漏的判断。具体操作参考
另外一个文件
(建立开发分支时务必保证按照规范命名,确保开发分支有带上tapd的 ID)
打标签
每上线一次打一次标签。(可考虑发版工具里自动实现)
代码合并方式
使用gitlab网站上的merge request操作。