Git Flow版本控制方式学习

        在团队日常开发中,选择合适的版本控制工具并灵活运用能更好的协调团队开发节奏,并保证公司重要的资产---项目文档资料---的安全性,同时也能为产品发布后的运行维护提供帮助。目前常用的版本控制工具是SVN(集中式)和Git(分布式),两者各有特点,选用哪种工具根据公司策略及其团队实际情况而定,如公司产品类型(线上或线下)、开发模式(敏捷或原型)、团队规模(单分支或多分支)、开发工具使用(原生或托管)等等,在实际使用案例中甚至可以组合使用,比如代码用Git、规划及美工用SVN。总之,不管选用哪种工具只要理解“版本控制 != 版本控制工具 !!!= 源代码管理”的基本原则(引用一),版本控制这个工作才有做好的可能。

        由于SVN的出现比Git早很多,网上有大量的相关介绍,在本文中不提及关于SVN的使用,而是介绍在学习Git的过程中看到的一篇关于介绍“Git Flow”方式团队开发版本控制机制的文章(引用二),经过学习并思考其实现细节,觉得对于分支用途的设计是其亮点,如下图:

Git Flow版本控制方式学习_第1张图片

        在原文中有关于Git分支功能及“Git Flow”方式使用的说明,文字内容描述得浅显易懂,有Git使用经验的人应该都能看明白。根据理论结合实际的习惯,本人进一步从过往开发实践中需求、开发、发布、测试几个阶段遇到过的痛点加入自己的六点理解:

1、master和develop是永久性建立的,hotfixes、feature、release是阶段性建立的;hotfixes从master新建、feature和release从develop新建;

2、master用于发布正式版本,存在紧急发布和周期性发布两种版本(前者是小版本、后者是大版本);

3、hotfixes在(紧急性)bug修改完成后要马上merge到master进行紧急性发布;相应地需要merge到develop以保证其与master的状态同步;

4、feature需要完成的阶段性新功能数量由周期性版本发布时间点决定,这样才能确定merge回develop的时机。一般来说新功能完成时间相对发布时间是要提前的,这样才能为测试和修改(非紧急性)bug提供缓冲;

补充:在各方面资源(人力物力)丰富的情况下,feature可以新建多个来并行开发,为多个周期性版本的新功能实现提供支持;

5、基于第4点,在feature阶段性新功能merge到develop后,由develop再新建release,在release基础上进行测试和(非紧急性)bug修改,在周期性版本发布前可随时将修改内容merge回develop;

补充:在release进行测试、修改、merge回develop这个过程中,如果有临时性新功能需求到达也是可以新建feature进行同步开发的,但要注意第一是保持三者状态同步,第二是新功能只能延迟到下一周期性版再发布了;

6、在周期性版本发布时间到达时,将release的内容一次性merge到master;由于之前release是随时merge到develop的,所以develop和master是状态同步的;

        有一点要在此提及,“Git Flow”方式是针对单一的Git代码仓库而设计的,而象Android这种大型的开源项目是通过Repo工具管理的几百个Git代码仓库,根据本人尚未实践的想法认为:由于在Android实际开发中修改的代码仓库数量有限,也是可以利用“Git Flow”方式来进行的;不过由于Android是通过Repo和Manifest方式来统一管理各代码仓库稳定版本的Tag(或Build ID),是否与“Git Flow”的Tag管理存在冲突尚有疑问,接下来要做的就是了解“Git Flow”的实际细节及是否适合应用到Android开发中。

/*******************************************************************/
2016.12.09补充
在学习《Git权威指南》作者的个人网站内容时,有一篇主题为“Why Git is better than SVN”的文章(引用三)最后一段关于什么情况推荐使用SVN的说明,和我当初选用SVN做为规划及美工文档版本控制工具的原因不谋而合。再次说明了工具是死的,用的人灵活运用就能发挥其优势。

/*******************************************************************/

引用一:SVN和Git的比较
http://blog.csdn.net/a117653909/article/details/8952183

引用二:从0开始学习 GitHub 系列之「团队合作利器Branch」
http://blog.csdn.net/googdev/article/details/51880064

引用三:Why Git is better than SVN
http://www.worldhello.net/2012/04/12/why-git-is-better-than-svn.html


你可能感兴趣的:(linux)