【开源项目】保姆指导讲解优质项目分支管理

简介: 学委最近又开发了一个项目,后面会说。

这次学委讲讲开源项目的分支管理,帮助读者了解开源项目是怎么管理代码的。


多数开源项目都是main(以前是master/trunk)分支管理代码的。


开发版本或者中间修订版本走feature 分支发布,然后再定期合并到master 分支。


分支管理是什么

分支管理,简单理解,就是多条生产线管理,比如一款手机的多个版本的生产。


比如某个手机的三条生产线:


现售的Mate30手机,在装订生产。

同时还有Mate20旧版本还有部分销售订单还在继续装订。

新版本Mate40还在研发


这样就好理解,我们的项目代码就是制作手机的输入,通过管理多个分支,让不同产品线团队做到最大程度的独立开发,发布不同款式产品。


下面介绍一下著名开源项目和我们做开源项目应该怎么进行分支管理的


第一种 基于主干分支管理(Trunk Based)比如LINUX内核

我们打开Linux内核的主线repo,看到如下的分支,只有master主干分支。


image.png

非常简单,也比较典型的主干为中心的分支管理。


因为linux内核主线只有一个,新的特性代码会被不断提交到主线,新内核也没有必要支持向后移植。

如果需要得用指定的tag来检出特定版本分支,进行修订发行。


就像下图一样,以trunk分支为中心,每一个弯都是一个PR(Pull Request),合并到trunk分支。


image.png

学委补充一下PR,PR代表每次有效开发工作的提交与合并。


主干分支管理的好坏:


好处:简化管理,所有特性只要审核通过马上合并到主干分支。这样随时可以发布,也避免了出现大规模集成的风险。


缺点:一个个单一的提交造成问题不大,不过当出现颠覆式的提交或者多个提交,这些提交造成的问题会一直影响主干分支,也影响到每次发布,直到问题解决。


小伙伴可能有疑问了,那么稳定发行版本,如何进行打补丁(比如遇到bug或者安全漏洞需要提交修改)


稳定版本仓库:https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/


linux还有一个独立的stable 仓库,它基于主线分支的一次镜像(或者定期同步,主要是发行大版本的时候)。


确定了发行的主版本后,做一个分支发布为stable仓库,后续比较急的补丁都打在stable分支上,然后再回顾这些提交,发布到内核仓库的主干分支。


第二种 Gitflow模式,即多特性分支管理, 比如hadoop

大数据的底层hadoop框架是怎么发行的?


我们看看下图,这就一目了然了。


image.png

一个trunk主干分支,加上现行的主流版本的特性分支(branch-2.10, branch-3.2等)。


别看有trunk分支就是咬定了是trunk-based开发模式,我们要看这个产品活跃分支。


hadoop框架诞生很早,应用比较广泛,属于应用型上层框架。

很多企业用的版本都不是统一个的3.X新版本,不少企业还是2.X版本。所以hadoop社区采用这种分支管理模式,长期维护了多个主流版本的开发。这点学委觉得是非常合适的。


就像下图一样,每一个弯都是一个PR(Pull Request):


image.png

学委想指出,这里出现了多个长分支,像feature1.x, feature

2.x(当然hadoop现在不维护1.x版本了),这个图只是展示作用。


这样的好处:


各个分支的开发独立运作,hadoop 2.X项目主要还是基于Java7运行环境执行。而hadoop 3.X 跟Java8运行。


这样提高了不同分支的独立行,兼顾发行效率。毕竟java7跟java8有不少区别的。


坏处最关键的就是:合并的风险!


随着时间发展,这些大分支积累的patch和主干分支积累的新开发特性,总需要一个时间合并起来,这时候需要很多工作进行合并校对应对一个相对大的工程。


这些大量代码合并往往需要配套不止集成测试,还有回归测试。(当然主干分支需要这套,但是主干分支可以保存每天测完,这个是多分支管理无法比拟的)


延伸 - 自己的项目该如何选择?

非常简单,如果是个人开发者,直接走TBD(Trunk Based Development)。比较简单,随时可以打一个tag,发布一个版本。


如果是一个百人团队,那么学委建议根据实际考虑了。


统一业务平台(二开或者传统大型平台)多团队多项目开发,建议走Git Flow(feature branch模式)多分支模式开发,保证各个项目团队的独立性,同时缩短定期合并的周期。


微服务多组件的单个平台,可以走TBD,划分业务的服务单元保证多个业务单元独立开发,同时分化一个核心平台组管理开发平级别需求。


思考的核心,是把平台规划好,让它支持TBD模式,避免出现大规模合并,除了开发测试成本,这个需要很大量管理介入协调!


目录
相关文章
|
分布式计算 Java 关系型数据库
Linux中jar包启动和jar包后台运行的实现方式
Linux中jar包启动和jar包后台运行的实现方式
2613 0
|
12月前
|
自然语言处理 安全 数据挖掘
MCP 如何构建企业级数据分析 Agent?
阿里云实时数仓 Hologres,联合函数计算 FC 推出「Hologres + 函数计算 FunctionAI + Qwen 构建企业级数据分析 Agent」方案,帮助用户快速对接 MCP,高效跨越企业级数据分析 Agent 构建困境。
|
Kubernetes 网络协议 API
在k8s集群中解决master节点与node通信问题
整个排查和解决流程需要综合应用以上方法,以及根据具体情况调整排查顺序或应用其他技术细节。为保证解决方案的实用性和有效性,还需紧跟Kubernetes社区的最新动态和最佳实践。在实际操作过程中,应记录所采取的步骤和观察到的系统响应,以便在遇到类似问题时能够快速定位和解决。
741 8
|
机器学习/深度学习 人工智能
Diffusion-DPO:一种基于直接偏好优化的扩散模型对齐新方法
本文介绍了一种名为 Diffusion-DPO 的创新方法,该方法基于直接偏好优化(DPO)原理,简化了扩散模型与人类偏好的对齐过程。相比传统的基于人类反馈的强化学习(RLHF)方法,Diffusion-DPO 避免了显式奖励模型的训练,通过数学近似简化实现流程,并在处理开放词汇表场景时展现出更强的能力。实验结果表明,该方法在 Stable Diffusion 1.5 和 SDXL-1.0 等主流模型上显著提升了生成图像的质量和可控性,为未来扩散模型的发展提供了新的思路。
1468 14
Diffusion-DPO:一种基于直接偏好优化的扩散模型对齐新方法
|
传感器 算法 安全
蓝牙中频率跳变技术的原理及其应用
蓝牙中频率跳变技术的原理及其应用
1533 9
|
机器学习/深度学习 人工智能 前端开发
【AI系统】编译器基础介绍
随着深度学习的发展,AI模型和硬件技术不断演进,开发者面临如何有效利用算力及应对AI框架迭代的挑战。AI编译器成为解决这些问题的关键技术,它帮助用户专注于上层模型开发,减少手动优化性能的成本,最大化硬件效能。本文探讨编译器基础概念,解释编译器与AI框架的关系,介绍编译器与解释器的区别,以及AOT和JIT编译方式的特点和在AI框架中的应用。通过分析Pass和中间表示IR的作用,进一步理解编译器在AI领域的核心价值。
793 5
|
开发框架 缓存 前端开发
实战.NET Framework 迁移到 .NET 5/6
从.NET Framework 迁移到.NET 5/6 是一次重要的技术革新,涵盖开发环境与应用架构的全面升级。本文通过具体案例详细解析迁移流程,包括评估现有应用、利用.NET Portability Analyzer 工具识别可移植代码、创建新项目、逐步迁移代码及处理依赖项更新等关键步骤。特别关注命名空间调整、JSON 序列化工具更换及数据库访问层重构等内容,旨在帮助开发者掌握最佳实践,确保迁移过程平稳高效,同时提升应用性能与可维护性。
604 2
|
监控 定位技术 Android开发
如何获得你的准确位置及iphon手机应用定位不准确原因分析
如何获得你的准确位置及iphon手机应用定位不准确原因分析
1326 0
|
SQL 关系型数据库 MySQL
Hive【环境搭建 01】【hive-3.1.2版本 安装配置】【含 mysql-connector-java-5.1.47.jar 网盘资源】【详细】
【4月更文挑战第6天】Hive【环境搭建 01】【hive-3.1.2版本 安装配置】【含 mysql-connector-java-5.1.47.jar 网盘资源】【详细】
1618 1

热门文章

最新文章