代码分支管理:主干发布分支开发的子类型
创始人
2025-05-30 15:33:18

大家好,我是rainbowzhou。
上篇文章代码分支管理中,我介绍了3种常见的分支开发模式。今天和大家细聊一下,其中的主干发布,分支开发的两种子类型。

引言

根据DevOps研究评估组织(DORA)连续多年对互联网公司的IT效能的调研,全球数千家公司参与了该项调查,其中关于代码配置管理的内容,值得我们思考。
根据以往数年的经验,在高效能研发团队中,相比长期存在的特性分支,基于主线的小批量研发分支更加受到欢迎,行业中的很多先驱者倾向于把工作置于分支上。调查结果表明,以下开发实践可以显著帮助软件交付变得更加高效:

  1. 每天向主干合并一次代码
  2. 让分支生命周期尽量短(少于一天);
  3. 同一时间少于三条的活跃分支

说说我对上述实践的理解,想要成功使用主干发布,分支开发的这种模式,那么首先要让主干尽可能一直保持在可发布状态,其次每个分支的生命周期应该尽可能短,然后主干代码尽早与分支同步,最后一切以主干代码为准,尽可能不要在各特性分支之间合并代码;

分支开发主干发布模式,按照分支存在的周期和目的,可进一步分为:特性分支模式和团队分支模式。

特性分支模式

什么是特性分支模式?

在开发过程中,允许多个开发分支同时存在,且每个分支对应一个功能特性的开发工作。当该特性开发完成后,立即合入主干,其他尚未合入主干的特性分支需要从主干拉取主干代码,与自己分支上的代码进行合并后,才能再合回主干。这种模式为特性分支模式。

特性分支模式的优劣势?

该模式的目的是:让团队更容易在“特性”这个层次上并行工作,同时保持主干的稳定可发布状态。其优势在于每次发布的内容调整起来比较容易。假设某个新功能或者缺陷在版本发布时间点之前无法完成,则不必合入主干中,也不会影响其他功能的发布时间点。

不足:如果特性分支过多,会带来比较多的合并成本。
例如,每当某个特性分支开发完成打算合入主干时,都需要与主干的代码合并,并进行质量验证。一旦主干代码的质量验证通过,其他分支此时都应该从主干上拉取最近的通过质量验证的新代码。否则,如果在特性开发完成后再与主干合并,那么这种一次性合并会带来较大的工作量和质量验证工作。

常见场景

如果有多个特性同时开发完,怎么办?
方法A:所有已完成的特性分支一同向主干合并,然后共同设法让主干代码达到可交付状态。通常该方式不被研发团队采纳,原因是太多的分支一起合并,多方的代码混合在一起,一旦出现了问题,定位问题的难度和修复问题的成本都会大大增加高。
方法B:所有已完成的特性分支排队,以顺序的方式合入主干。好似流水线一般,每个特性分支向主干合入代码后,必须使主干代码达到可交付状态后,才能再合并下一分支特性。这样才能发挥特性分支的优势。但是随之而来的问题是,多个特性分支按排队顺序进行合并,会导致排在队尾的分支等待较长时间。

那么如何减少特性分支的等待时间呢?
可以参考下面的方式:

  1. 对要合并的特性分支做一次最短路径依赖分析,即无前置任务优先,执行时间短的任务优先;
  2. 构建流水线时,无关联的任务可以并行;
  3. 若使用了Docker,可以巧用Docker Cache。若无变动则复用缓存,使得多次重复构建的时间大大缩短。典型的如前端依赖项里的npm install,变更依赖对于高频集成属于小概率事件。因此我们可以在第一次构建时,可以将node_modules这个文件夹打包成为镜像供下次编译时调用。

团队分支模式

什么是团队分支模式?

团队分支可以看作是特性分支的一种特殊情况。即一组人一起在同一个分支上进行开发工作,并且该分支上通常包括一组相近或相关的特性集合的开发。故其分支存续时间比特性分支的存续时间长。

团队分支的适用场景?

该分支模式常见于通信公司的产品研发或大型客户端软件产品研发。成功应用这种模式的关键点在于:

  1. 每个团队尽早合入高质量的代码,即使不马上发布;
  2. 向主干合入代码后,尽快使其达到可交付状态;
  3. 其他团队尽早从主干拉取可交付状态的代码,与自己分支的代码合并。

以上,有任何想法都欢迎大家后台私信我,一起探讨交流。

如果文章对你有帮助,记得在看、点赞、转发、加关注哦!

相关内容

热门资讯

数据分析Numpy之布尔索引 布尔数据:只有两种值,即真(True)或假&...
深入理解JVM虚拟机(二) 目录: (1)堆 (2)堆-内...
【Java SE】变量的本质 目录一. 前言二. 变量(variable)2.1 性质2.2 变量类型2.2.1 核心区别2.3 ...
金属的截止频率(红限)是什么,... 金属的截止频率(红限)是什么目录金属的截止频率(红限)是什么极限频率的介绍什么是金属的截止频率光电效...
曾国藩有那七句最著名的名言,曾... 曾国藩有那七句最著名的名言目录曾国藩有那七句最著名的名言曾国藩说过的名言名句。曾国藩的名言曾国藩名言...
二八佳人打一生肖(二八佳人打一... 今天给各位分享二八佳人打一生肖的知识,其中也会对二八佳人打一生肖是什么进行解释,如果能碰巧解决你现在...
水晶底是什么材质,nike 篮... 水晶底是什么材质目录水晶底是什么材质nike 篮球鞋水晶底氧化吗?水晶是什么材料玻璃杯水晶底和烧厚底...
从0开始学python -67 Python3 pip pip 是 Python 包管理工具,该工具提供了对 Pyth...
接入HMS Core应用内支付... 华为HMS Core应用内支付服务(In-App Purchases,I...
怎么用pscs6的路径选择工具... 怎么用pscs6的路径选择工具目录怎么用pscs6的路径选择工具ps如何选择路径ps如何选择路径区域...
电动车后面总是哒哒响asdad... 本篇文章极速百科给大家谈谈电动车后面总是哒哒响asdad1,以及电动车后面总是哒哒响维修视频对应的知...
新起亚K3的CVT耐用吗?起亚... 今天给各位分享新起亚K3的CVT耐用吗?起亚K3七速双离合到底好不好的知识,其中也会对起亚k314t...
职场kpl是什么意思,kpl在... 职场kpl是什么意思目录职场kpl是什么意思kpl在工作中是什么意思?职场kpl是什么意思职场kpl...
那些我在初级程序员阶段犯过的错 学习鉴别,形成习惯,避免犯错我要先说清楚一件事。如果你是一个初级程序员&...
完全小白的pycharm深度学... 完全小白的pycharm深度学习调试+for循环断点条件设置写在最前面基础方法pycharm...
MongoDB增加计算列并修改... 1. 增加、删除列 通过聚合,使用操作符$set增加列;修改结果...
阿里云PAI-DeepRec ... 阿里云联合英特尔举办的“创新大师杯”全球AI极客挑战赛——PAI-DeepRec CTR模型性能优化...
评价老师上课的评语有哪些,对上... 评价老师上课的评语有哪些目录评价老师上课的评语有哪些对上课教师课堂的评价怎样用专业术语评价任课老师讲...
噬血代码ign评分,噬血代码有... 噬血代码ign评分目录噬血代码ign评分噬血代码有缺陷是什么意思IGN评分是什么意思噬血代码能力值怎...
java并发 AQS 什么是AQS? 为什么它是核心?AQS的核心思想是什么? 它是怎么实现的? 底层数据结构等AQS有哪...
长喙的意思长喙解释(长喙的意思... 今天给各位分享长喙的意思长喙解释的知识,其中也会对长喙的意思和拼音进行解释,如果能碰巧解决你现在面临...
广西壮族自治区出租汽车司机崔腿... 今天给各位分享广西壮族自治区出租汽车司机崔腿粗师傅在四十四棵死涩...的知识,其中也会对广西壮族自治...
开发中常用多线程异步操作场景解... 场景一:批量操作,事务控制部分回滚 第一步:创建现场池,注意不同业务场景...
信息系统项目管理师 第2章 信... 1.信息技术及其发展 可分为硬技术(物化技术)传感器、服务器、智能手机、通信卫星和软技术(非物化技术...
【C++】一篇带你搞懂C++“... 前言在C语言的学习中,并没有引用这个概念,但是在C++中...
烧鸡怎么盘,烧鸡的腿怎么塞肚子... 烧鸡怎么盘目录烧鸡怎么盘烧鸡的腿怎么塞肚子里关记烧鸡的做法是什么?大盘烧鸡怎么做烧鸡怎么盘 烧...
on和upon的区别是什么,o... on和upon的区别是什么目录on和upon的区别是什么on和upon有什么区别?upon和on的区...
什么是圆呢圆的主要性质是什么,... 什么是圆呢圆的主要性质是什么目录什么是圆呢圆的主要性质是什么圆有哪些性质?圆的基本性质是什么圆的定义...
汽车雨刷刮不干净怎么办,雨刷刮... 汽车雨刷刮不干净怎么办目录汽车雨刷刮不干净怎么办雨刷刮不干净水怎么办汽车雨刮器刮不净怎么办?雨刮器刮...
[数据分析实战][37] 基于... 参考资料: 数据科学家赚多少?数据全分析与可视化-ShowMeAI 前言...