前一篇介绍了 git相关的概念,咱们能够查看文件的状态,在各个状态之间进行切换,能够建立和合并分支,经过rebase还能够整理本身的提交历史。经过这些命令和操做,就可完成工做流规范规定的操做流程了。git
本篇介绍具体的规范,包括分支的划分和命名规范,不一样类型的分支应对不一样的场景,而后会介绍下工做流工具git-flow,如何简化咱们的操做。服务器
master和develop分支一直存在,且名称不会变化,通常不直接修改这2个分支,由其余分支合并而来。session
feature、release、hotfix分别用于功能点开发、优化,特定版本测试,线上问题紧急处理,同一类型的分支会产生多个。分布式
分支划分以下:工具
命名规范约定以下:post
好比有一个「优化分布式Session」的需求,可在develop分支的基础上建立新分支 feature/optimize_distributed_session进行开发,开发完成后合并到develop分支。测试
主分支,与线上运行的版本始终保持一致,任什么时候候都不要直接修改master分支。优化
一个版本的release分支、hotfix分支开发完成后,会合并代码到master分支,也就是说master分支主要来源于release分支和hotfix分支。命令行
开发分支,始终保持最新完成以及bug修复后的代码,新增功能时基于该分支建立feature分支。cdn
一个版本的release分支、hotfix分支开发完成后,也会合并到develop分支,另外,一个版本的feature功能开发完成后,也会合并到develop分支。也就是说develop分支来源于feature、release、hotfix分支。
开发新功能或优化现有功能时,会建立feature分支,以develop为基础建立。通常会有多个功能同时开发,但上线时间可能不一样,在适当的时候将特定的feature分支合并到develop分支,并建立release分支,进入测试状态。
当一组feature开发完成,会首先合并到develop分支,开始进入提测阶段时,会建立release分支。
以release分支代码为基准提测,测试过程当中若存在bug须要修复,则直接由开发者在release分支修复并提交。
测试完成以后,合并release分支到master和develop分支,此时master为最新代码,用做上线。
线上出现紧急问题时,须要及时修复,以master分支为基线,建立hotfix分支,修复完成后,须要合并到master分支和develop分支。
develop分支已存在未上线的feature代码, 此时须要紧急上线一个新功能, 但develop的代码不能上,如何处理 ?
以develop为基线,建立了f1和f2两个feature分支以后, f1,f2开发一半的时候,发现两个分支代码须要有依赖怎么办 ?
必定要保证commit历史记录的整洁,代码合并时,根据状况选择merge或rebase;
使用rebase注意,一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行衍合操做;
提交说明规范:
上面的流程在第一次接触时,会以为有点复杂,经过git-flow工具能够把这些流程自动化。它是一个命令行工具,支持各个平台,好比OSX、Linux、Windows等支持。
经过 git flow init 命令进行初始化,以交互式的方式进行,主要是约定分支的命名,建议使用默认值;
git flow feature start f1 添加新特性,这个操做建立了一个基于develop的特性分支,并切换到这个分支之下。
git flow feature finish f1 完成新特性,这个操做会合并f1分支到develop分支,并删除特性分支,切换回develop分支。
git flow feature publish f1 发布新分支,发布新特性分支到远程服务器,其它用户也可使用这分支。
git flow release start r1 [BASE] 建立发布版本,[BASE]是以哪一个分支或commit为基础进行发版,通常为develop。
git flow release publish r1 发布release分支,其余同事就能够看到这个分支,并修改一些小问题。
git flow release finish r1 完成release分支,会合并release分支到master分支,用release分支名打Tag,合并release分支到 develop分支,最后移除release分支。
有可能须要修正 master 分支上某个 TAG 标记的生产版本。
git flow hotfix start VERSION [BASENAME] 建立hotfix分支,VERSION 参数标记着修正版本,[BASENAME]为finish release时填写的版本号。
git flow hotfix finish VERSION,当完成紧急修复分支,代码合并到develop和 master分支。相应地,master分支打上修正版本的 TAG。