git工作操作(GitFlow工作流模型)

Git Flow 是什么?

2010年5月,在一篇名为“A successful Git branching model”的博文中,原Git Prime的首席技术官Vincent Driessen介绍了一种构建在Git(一个开源的分布式版本控制系统)之上的软件开发模型。通过利用Git创建和管理分支的能力,为每个分支设定具有特定的含义名称,并将软件生命周期中的各类活动归并到不同的分支上,实现了软件开发过程不同阶段的相互隔离。这种软件开发的活动模型被Vincent称为“Git Flow”(Git工作流程)。Git Flow已经开始流行于基于主干的工作流,它现在被认为是现代连续软件开发和DevOps(开发、技术运营和质量保障三者的交集)实践的最佳实践。

这是Vincent博文中的Git Flow流程图:(从右向左看,从上到下看)

git工作操作(GitFlow工作流模型)(1)

Git Flow分支说明

Git Flow的核心就是分支(Branch),通过在项目的不同阶段对分支的不同操作(包括但不限于创建、合并、变基等)来实现一个完整的高效率的工作流程。Git Flow的分支主要分为两大类:主分支和辅助分支。其中主分支包含主要分支和开发分支,而辅助分支包含功能分支、预发分支、热修复分支以及其他自定义分支。

1,主要分支(Master)

主要分支上存放的是最稳定的正式版本,并且该分支的代码应该是随时可在生产环境中使用的代码。当一个版本开发完毕后,产生了一份新的稳定的可供发布的代码时,主要分支上的代码要被更新。同时,每一次更新,都需要在主要分支上打上对应的版本号。

任何人不允许在主要分支上进行代码的直接提交,只接受其他分支的合入。原则上主要分支上的代码必须是合并自经过多轮测试及已经发布一段时间且线上稳定的预发分支。

2、开发分支(Develop)

开发分支是主开发分支,其上更新的代码始终反映着下一个发布版本需要交付的新功能。当开发分支到达一个稳定的点并准备好发布时,应该从该点拉取一个预发分支并附上发布版本号。也有人称开发分支为集成分支,因为会基于该分支和持续集成工具做自动化的构建。

开发分支接受其他辅助分支的合入,最常见的就是功能分支,开发一个新功能时拉取新的功能分支,开发完成后再并入开发分支。需要注意的是,合入开发的分支必须保证功能完整,不影响开发分支的正常运行。

3、功能分支(Feature)

功能分支一般命名为 Feature/xxx,用于开发即将发布版本或未来版本的新功能或者探索新功能。该分支通常存在于开发人员的本地代码库而不要求提交到远程代码库上,除非几个人合作在同一个功能分支开发。关于这点,Thought Works洞见上有一篇文章“Git Flow有害论”做了非常有意思的阐述,文章下的评论也异常激烈。也许该文章的名字可能有失偏颇,但文章的本意以及评论传达了一个观点:功能分支要求足够细粒度以避免成为长期存在的功能分支,应当小步合并而不是一次合并大量代码。

功能分支只能拉取自开发分支,开发完成后要么合并回开发分支,要么因为新功能的尝试不如人意而直接丢弃。

4、预发分支(Release)

预发分支一般命名为 Release/1.2(后面是版本号),该分支专为测试—发布新的版本而开辟,允许做小量级的Bug修复和准备发布版本的元数据信息(版本号、编译时间等)。通过创建预发分支,使得开发分支得以空闲出来接受下一个版本的新的功能分支的合入。

预发分支需要提交到服务器上,交由测试工程师进行测试,并由开发工程师修复Bug。同时根据该分支的特性我们可以部署自动化测试以及生产环境代码的自动化更新和部署。

预发分支只能拉取自开发分支,合并回开发分支和主要分支。

5、热修复分支(Hotfix)

热修复分支一般命名为Hotfix/1.2.1(后面是版本号),当生产环境的代码(主要分支上代码)遇到严重到必须立即修复的缺陷时,就需要从主要分支上指定的tag版本(比如1.2)拉取热修复分支进行代码的紧急修复,并附上版本号(比如1.2.1)。这样做的好处是不会打断正在进行的开发分支的开发工作,能够让团队中负责功能开发的人与负责修复的人并行、独立的开展工作。

热修复分支只能主要分支上拉取,测试通过后合并回主要分支和开发分支。

Git Flow模型通过不同的分支从源代码管理的角度对软件开发活动进行了约束,为我们的软件开发提供了一个可供参考的管理模型。Git Flow模型让代码仓库保持整洁,让小组各个成员之间的开发相互隔离,能够有效避免处于开发状态中的代码相互影响而导致的效率低下和混乱。但同时,不同的开发团队存在不同的文化,在不同的项目背景情况下都可能根据该模型进行适当的精简或扩充。防控中心通过合理使用Git Flow,更好地管理代码仓库,提高工作的效率。

本文内容为原创,转载请注明出处!

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页