常见的几种分支开发方式

一、背景

1、版本控制最经常用在软件开发领域

分支管理的策略确实很考验对人性的理解,从理念上说它要

符合人性
能自动化的就不要人工做,缺少工具支持的流程就是耍流氓 

要让它既灵活,又简单,就需要

  1. 首先别让我记住很多规则
  2. 其次别让我做很多合并
  3. 最后是敏捷,如何让我不要被别人耽搁 

所以:

  1. trunk 发布是最简单的规则,任何时候不管是家里,公司,新人旧人都可以记住
  2. 迭代分支直接开发,免去特性分支到迭代分支的合并,简洁易行
  3. 提前做好迭代的规划,迭代分支已经是比较不可分割的整体,全体特性一起上或一起延迟,敏捷是有限度的

2、问题

并行软件开发是企业级环境下软件开发的一种不可避免的模式,这种开发模式可以说是任何大中型软件产品和项目所必需的。然而,并行开发在为我们的开发效率提高保证的同时,也会给我们的开发管理带来诸多问题:

  • 什么时候进行分支?
  • 什么时候进行合并?
  • 如何选择有效的分支策略?
  • 如何保证不同分支上的代码同步问题?
  • 如果建立对分支访问控制的授权机制?
  • 如何避免频繁的合并冲突?
  • 如何处理被复用的代码?

二、说明

1、主干开发

在这种模式下,开发人员几乎总是签入代码到主干,而使用分支的情况极少。主干开发有如下三个好处:

  • 确保所有的代码被持续集成
  • 确保开发人员及时获得他人的修改
  • 避免项目后期的“合并地狱”和“集成地狱”

缺点:

每次向主干签入并不都是可发布状态

 

主干开发在这里的含义如上图,它有如下特征:

  1. 所有人工作在单一的主干上
  2. Bug fix也在主干进行
  3. 没有代码会被冻结
  4. 没有merge灾难
  5. 不会build broken,它永远是release-ready状态 

对于极小型的、业务功能不大变化的Service/API项目,或者是线上bug紧急fix,我们依然使用主干开发。它是最简单、最可控的一种。

2、按发布创建分支

在这种模式下,在某个版本即将发布之前,创建一个分支,该发布版本的测试和验证全部在该分支上进行,而最新的开发工作仍旧在主干上进行。要遵循如下规则:

  • 一直在主干上开发新功能
  • 当待发布版本的所有功能都完成了,且希望继续开发新功能时才创建一个分支
  • 在分支上只允许提交那些修复严重缺陷的代码,并且这些修改必须立即合并回主干
  • 当执行实际的发布时,这个分支可以选择性的打一个标签

3、按功能特性创建分支

这种模式是为了让开发团队更容易在“特性”层次上并行工作,并保持主干的可发布状态。

每个用户故事或者特性在不同的分支上开发完成,一个故事只有通过测试人员验证无问题后,才会被合并到主干上,以确保主干一直是可发布的。

该模式的动因是希望一直保持主干的可发布状态。

要想让这种模式有效果,有一些前提条件:

  • 每天都要把主干上的所有变更合并到每个分支上
  • 每个特性分支都应该是短生命周期的,理想情况下应该只有几天,绝不能超过一个迭代周期
  • 活跃分支的数量在任意时刻都应该少于或者等于正在开发当中的用户故事的数量。除非已经开发的用户故事合并回主干,否则谁都不能创建新分支
  • 在合并回主干之前,该用户故事应该通过测试人员验收通过。只有验收通过的用户故事才能合并回主干
  • 重构必须即时合并,从而将合并冲突最小化,这个约束非常重要,但也可能非常痛苦,进而限制了这种模式的使用。
  • 技术负责人的一部份职责就是保证主干的可发布状态

4、按团队创建分支

这种模式试图解决如下状况:在一个大型团队里,有很多开发人员同时工作在多个工作单元上,并且还要维持主干总是处于可发布状态。

下面是按团队分支的工作流程:

  1. 创建多个小团队,每个团队自己都有对应的分支
  2. 一旦某个特性或用户故事完成了,就让该分支稳定下来,并合并回主干
  3. 每天都将主干上的变更合并到每个分支上
  4. 对于每个分支,每次签入后都要运行单元和验收测试
  5. 每次一个分支合并回主干时,在主干上都要运行所有的测试(包括集成测试)

三、注意事项

最后,说说分支合并管理的一些注意点:
1.分支离开主干的时间要尽可能短。长期离开主干的分支需要定期合并。
2.辅助文档是必需的。为了观察分支的创建和合并的过程,至少需要一份类似泳道图的文档标记每一次分支创建和合并的过程。
3.开发分支往主干或者发布分支合并的次数应该尽可能少。一般来讲应该在单体测试结束合并到主干或者发布分支,然后进行结合测试。如果结合测试里发现bug不应该在原来的开发分支上继续修改,而应该创建新的分支进行修改。
4.分支创建和合并的log必须规范。便于以后查找。基本的log信息应该包括从哪个个分支的哪个版本创建分支;把哪个分支的从哪版本到哪个版本范围内的变更合并到了哪个分支的哪个版本,合并后的版本号。这些信息有一些是版本控制工具本身可以很方便查找到的,就可以省略。

四、参考路径:

1、https://www.tapd.cn/forum/view/69961

2、https://svnbook.red-bean.com/zh/1.8/svn.branchmerge.commonpatterns.html

3、https://www.cnblogs.com/shihao/archive/2012/03/28/2421224.html

4、https://www.jianshu.com/p/87e75a69ed17

5、https://blog.csdn.net/iteye_4392/article/details/81597716

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GitLab分支策略是指在开发过程中使用不同的分支来管理代码的一种方法。分支是用于独立开发和管理功能的副本,可以在不影响主要代码的情况下进行修改和测试。 在GitLab中,常见分支策略包括以下几种: 1. 主分支(Master/Main):主分支是项目的主要分支,用于存储稳定的、可发布的代码。通常情况下,主分支应该保持干净、可用,并且只允许合并经过验证的代码。 2. 开发分支(Development):在主分支的基础上创建的开发分支,用于并行开发多个功能。开发人员可以在开发分支上进行修改、测试和提交代码。一般情况下,这个分支会持续不断地接收从其他分支合并的代码。 3. 功能分支(Feature):功能分支用于对一个具体的功能进行开发。每个功能分支都从开发分支上创建,并在开发完成后再合并回开发分支,然后可以选择是否将其合并回主分支。 4. 修复分支(Hotfix):修复分支主要用于解决主分支上的紧急问题。当主分支上出现了一个严重的问题,需要立即修复时,可以从主分支上创建一个修复分支,在修复完成后再合并回主分支。 在实际应用中,可以根据项目的规模和需要进行适当的调整和定制。例如,对于大型项目,可以引入预发布分支(Release)用于测试和准备发布版本。另外,还有一些高级的分支策略,如可选分支(Optional)、Bug分支(Bug)等,可以根据实际情况选择使用。 总之,使用GitLab的分支策略可以有效地实现团队协作和代码管理,使开发过程更加清晰、可控,并且能够快速响应和解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值