博客转移到个人站点:http://www.wangchengmeng.club/2018/02/04/Git%E4%B9%8BGitFlow/
欢迎来吐槽
上一篇讲解了Git的使用方式和一些常用的命令,当你看完第一篇文章,你可能觉得和SVN没有多大的区别,但是Git作为分布式管理工具,相比SVN是有它自己的优势的,虽然SVN也可以进行多分支开发,但是当你真正认识了Git之后,你会发现,在大型项目的后期迭代和维护上,如果你使用Git管理,你会节约很大的维护成本,减小代码错乱的风险,那么,今天小编就简单介绍一下Git Flow。
Git Flow是什么?
首先Git Flow它不是一种工具,而是一种思想,通过利用Git创建和管理分支的能力,为每个分支设定具有特定的含义名称,并将软件生命周期中的各类活动归并到不同的分支上。实现了软件开发过程不同操作的相互隔离。
单分支带来的问题
1、混乱的代码版本
2、冲突严重
3、无法隔离多人协作的开发环境,特别是大型项目
4、try版本无法隔离
5、测试和发布版本不稳定
6、发布当前版本代码冗余,附带非当前版本代码
所以在你使用单分支进行开发的时候,每个版本的代码是非常难管理的,于是乎,你会喜欢上多分支的管理
分支介绍
主要分支:(该分支会加锁,避免多人开发的时候因为误操作去修改分支内容,锁住是为了保证该分支代码的稳定)
发布分支(生产环境) master(release)
开发分支 develop
辅助分支:(开发人员在该分支上进行开发)
功能分支 feature
预发布分支(测试环境) release
修复分支 hotfix
分支功能介绍
主分支master: 主要保存生产环境历史版本,部署线上版本;
开发分支develop: 用于组织和开发(组织清晰的需求版本变化,便于加入新的开发活动)。
功能分支feature:解决特定的功能需求,或者开发中版本的bug修复。
预发布分支release: 为准备发布的正式版本做集成测试的分支。
修复分支hotfix: 从release分支中生出,为紧急修复生产环境中的bug而产生。(release版本记录的重要性)
其实从图中你可以发现 master和develop分支是很干净的,因为我们无论是迭代还是修复都不会在该分支去动手,只需要将新写的代码合并到该分支上。首先来看看develop分支吧,从开发分支分出来的feature就是我们用来开发的分支,feature分支完成后,合并到开发分支,如果需要修改或者增加功能,可以继续在develop分支分出来,而develop分支的代码是保证可以正常运行且没有问题的代码,保证稳定。而master分支就是上线的版本,一个节点就代表一个版本,即使在上线版本发现BUG,也不会在master分支上去修改,直接分一个hotfix出来,修复后合并到develop分支,随着下一个迭代的上线合并到master分支。这样的分支管理,我相信你现在应该感觉到Git的优势了吧,对每一个版本的记录,乃至细致到每一次提交每一次修复节点都有个清晰的记录,方便后期的查找和维护,Git会帮助你记住你开发过程中一切的蛛丝马迹。
合并要求
Release主分支只有项目leader可以合并
Develop主分支只有项目leader可以合并
主分支合并请不要使用快速合并方式
辅助分支合并前必须先自行解决冲突
冲突一定是在本地解决完毕后,再发出合并请求请求合并,保证服务器上是没有冲突的。
rebase命令的使用
多人开发的时候,独自在各自的分支上进行开发,然后将自己的feature分支代码发送合并请求合并到develop分支,那这样就存在一个问题,你不知道谁会比你请求合并,也许另一个人已经请求合并到了develop分支,为了将冲突放在本地解决,保证服务器上没有冲突,那么rebase命令就起到作用了。
1、在你的feature分支上完成修改提交
2、切换到develop分支,拉取服务器上最新代码
3、保证develop分支最新代码后,切换回feature分支
4、在feature分支 使用 rebase develop命令,将C基点变到D基点,并解决冲突再提交,此刻你分支上就是最新的代码了。
rebase变基的原理和目的
原理:首先找到这两个分支的最近共同祖先 C,然后对比当前分支相对于该祖先的历次提交,提取相应的修改并存为临时文件,然后将当前分支指向目标基底 D, 最后以此将之前另存为临时文件的修改依序应用。
目的:
向当前开发中的分支引入最新修改。
确保在向远程/公共分支推送时能保持提交历史的整洁。
快速合并的规范和建议
辅助分支合并回主分支请用—no-ff
辅助分支的子功能分支合并请用—no-ff
辅助分支的修复分支合并使用ff
不适用快速合并的好处就是可以记录你每一个修改节点的一个清晰结构
Git Flow思想当你熟悉过后,在代码管理上你又提升了一个级别,不过小编暂时还在加油掌握的过程中,希望和大家一起学习,交流,多多提建议,毕竟这仅仅是小编的一个理解。