1. 概要

master分支(DevOps Permission)

  • 常驻分支也是稳定分支,是生产环境中最新代码
  • 由于灰度环境是模拟的生成环境,部署的也是master分支
  • 发布完成后,对每个版本进行tag
  • 不允许直接提交代码,只接受merge request

develop分支(Tech Lead Permission)

  • 常驻分支,是开发环境中最新代码
  • 不允许直接提交代码,只接受merge request
  • 该分支仅能merge当前版本要发布的feature及bug fixed

release分支(Test Team Focus)

  • 临时分支,也称测试分支,命名规则依赖于发布的版本号
  • release分支包含的内容为本次待发布的功能需求、改进优化或bug fixed
  • 生命周期从提测开始,bug修复到该版本发布之前为止
  • QA验证完毕,将该版本的release分支merge到master分支和develop分支
  • 测试阶段的bug fixed可在该release分支进行操作,不需要再切分支了
  • 该分支为待发布的封版代码,只允许bug fixed,不能提交无关代码,如代码优化等,如需必要优化及变更,请和产品测试达成一致。

feature分支(Dev Team Focus)

  • 功能分支也是临时分支,该分支需要关联到具体的JIRA号
  • 该功能分支当且仅当是一个feature的开发或一个bug fixed
  • 生命周期最短,颗粒度也比较小

2. 功能分支

checkout规则

从develop分支checkout待开发的功能分支,每个功能分支,需要关联到JIRA面板的一个任务即JIRA号,如上图所示,面板中BKWALLET-434,则对应分支为feat-434。

注意:

  • 由于每个功能分支依赖于具体的JIRA中的任务,需要将JIRA中任务进行拆分,拆分的粒度要需要Tech lead来操作,保证子任务在开发阶段的可执行性
  • 目前Feature分支的代码提交,会强制触发填写对应的JIRA号

merge request规则

将开发完毕的分支,拉取develop最新代码,merge并解决冲突后,之后在对应的feature分支创建并提交到develop分支,并自动触发merge request请求,由code review group进行代码审查。

注意:

  • 代码提交注释包含需求、改动点、JIRA号、注意事项等
  • 每个merge request不要包含不相关的功能
  • merge request提交后需要及时跟踪动态,包括通过、打回等
  • 该功能进入提测流程后,需删除之前的功能分支

3. 维护分支

当线上版本出现问题,需要从master分支checkout出hotfix分支,代码修复完毕,并且QA验证通过后,将该分支merge request到master和develop分支。

其中master分支的merge request需要admin来审批,admin可以是tech leader或devops,由项目组的实际情况来决定。

4. 命名规则

目前公司sprint迭代周期为两周,每个迭代周期内会有多次版本发布,内部版本号以M(milestone)序列开头,比如M5、M6、M7等;每个内部版本周期内也会存在多次小版本的迭代的情况。

Tag标签(Required)

每一次merge到master分支产生的变更,都需要进行tag,相比只用commit号来说,更容易追踪历史版本,有利于后期维护。针对不同项目特性、建议命名如下:

Backend(Java/PHP)/Frontend(Web)

tag命名方式建议方式为<内部版本号/子版本号>,子版本号可以为发布日期或临时版本号等形式,可由各组自行调整,比如M5/v1.1.0、M5/v1.2.0、M5/20181219等。

对于Hotfix的情况,tag标签命名方式,可以根据待修复的版本号+1,比如从tag为M5/v1.2.0,则修复后的tag为M5/v1.2.1。

Android/iOS

业务APP/对接业务SDK(比如钱包收银台SDK)的tag命名与发布版本号保持一致,比如v2.9.0;

业务组件的tag命名方式为内部版本号,可根据实际情况调整。

注意:移动端的版本发布会存在cross多个内部版本情况,因此,不需要指定内部版本号作为前缀形式。

release分支(Optional)

临时分支,命名规则建议与tag方式一致,也可以根据实际情况自行调整。

该分支完成发布后,将该分支删除。

feature分支(Optional)

临时分支,命名规则建议与JIRA号一致,也可以根据实际情况自行调整。

该分支merge到develop分支后或提测之前,将该分支删除。

hotfix分支(Optional)

临时分支,应用范围对于线上出现bug,需要紧急修复的情况,命名规则建议参考tag分支,不强制要求,可以根据情况自行调整。

该分支merge到master分支后,将该分支删除。

5. 常用Git命令

切换分支(分支名)

git checkout develop

创建local分支(分支名为feat-BKWALLET-233)

git checkout -b feat-BKWALLET-233

创建remote分支(分支名为feat-BKWALLET-233)

git push origin feat-BKWALLET-233

拉取remote分支到local(分支名为develop)

git pull origin develop

提交local changes到remote(分支名为develop)

git push origin develop

合并分支(develop分支merge功能分支 feat-BKWALLET-233)

git checkout develop // 切换

git merge feat-BKWALLET-233 // 合并

注意:确保当前分支为要合并分支,比如develop分支

删除remote分支(分支名为feat-BKWALLET-233)

git push origin :feat-BKWALLET-233

删除local分支(分支名为feat-BKWALLET-233)

git branch -D feat-BKWALLET-233

查看全部分支

git branch -a

将remote的新分支或新tag信息同步到local

git fetch --all

创建local tag(创建tag为M5/v1.2.0,同时要增加注释)

当前commit号打tag标签:

  • 无注释:git tag -a M5/v1.2.0
  • 有注释:git tag -a M5/v1.2.0 -m "M5的v1.2.0版本发布"

补打tag标签(指定commit号为 9fbc3d0):

git tag -a M5/v1.2.0  9fbc3d0

注意:

创建tag标签,根据命名方式可以对应到版本号及发布功能,因此,注释上不做强制,根据实际情况是否追加注释。

创建remote tag

git push origin M5/v1.2.0

从remote tag切换分支(hotfix分支为hotfix-1.2.0)

git fetch --all  // sync first

git checkout tags/M5/v1.2.0 -b hotfix-1.2.0

12-21 19:34