参考文章:
为无线前端团队打造高效git工作流
主要有以下分支:
分支 |
命名规则 |
master |
|
develop |
|
feature |
feature_mallapp_b2c_时间或者需求名称 |
hotfix |
hotfix_mallapp_版本名称 |
tag |
tag_mallapp_版本名称 |
master
是始终存在的,始终是稳定版本,也充当发布分支角色。只能合并代码不能修改代码。
develop
也是始终存在的,和master始终是并行的。一般是封板后合并到master,同时自动打包机器切换到master分支。
注意:可能存在多个业务线,发版时间也不同步,所以每个业务线都有自己的develop,这样各个业务不用相互等待或者相互干扰,master和develop的关系是1:n
feature
是需求开发分支,从develop分支创建,最终在确认需求开发完毕,要提测了才合并回develop分支。
待该版本发布了,应该立马删除。
hotfix
从tag拉出来,修复后合并master并同步到develop,应该也要立马删除。
tag
是在master发版了,打一个tag,方便版本回退。
注意:几个关键节点
在封板之前:
- 自动打包机器配置成develop分支。
- 修改bug,一定要在各自feature上修改,并合并到develop(最好由leader每次打测试包前统一合并)。
目的是防止某个需求不上,方便回退!!!
在封板之后:
- 自动打包机器配置成master分支。
- 修改bug,最好在develop分支上(由于确定所有功能都可以上了,所以没必要继续在feature上修改了),
并合并到master(最好由leader每次打测试包前统一合并)。
番外篇,帮助理解
develop分支存在意义?不可以从tag或者master上直接创建feature吗?
- tag存在的意义一般不是作为创建分支,请参考tag存在的意义
- 即使可以从tag创建feature分支,如果每个需求开发周期是连贯的,不存在时间上的重叠器,这样是可以从tag直接拉分支的。
但是实际情况是,迭代很频繁,可能这个需求还没发布,测试还没完成,就要基于当前feature开发新的
需求,那这时候只有在develop分支上创建新的feature。
- 如果没有develop分支,会导致很多feature直接合并到master,这样就不存在一个稳定的版本分支,如果此时有一个基于
上次稳定的版本开发一个需求,这个分支又从哪里创建呢。
tag存在的意义?
- 基于历史某个版本添加一个新功能,发布一个临时版本。
- 某个版本存在bug,修复改版本的bug。如果是最新的版本出现bug,是可以从master创建分支修复bug的。
- 回退到某个版本。比找commit id更简单。