一文掌握软件分支管理

简介: 本文详细介绍了软件分支管理的实践经验,结合具体项目案例,从版本号、分支命名、标签管理到合并策略等方面展开。通过清晰的规则和流程图示,帮助团队避免版本混乱,提升研发效率。强调主干与开发分支的核心作用,同时提醒合理控制分支数量,确保协作顺畅。适用于不同类型的项目,助力团队建立适合自身的版本管理体系。

一文掌握软件分支管理

[TOC]

脚步不停,终达卓越!更多优质文章及代码资源详见公众号 《开源519》

引言

  最近在项目中发现,软件版本管理较为混乱,框架的修改常常牵一发而动全身,严重影响研发效率。为此,结合过往经验及业界成熟的版本管理实践,以 Sparrow (https://gitee.com/LinuxTaoist/Sparrow) 项目为例,对常用的版本管理进行总结。

概要

版本管理涵盖以下几个关键方面:

  • 版本号管理: 用类似于 v1.0.0-rc 的格式标识版本,便于快速识别版本用途。
  • 分支管理:master/dev/feature-*等命名不同分支,避免不同项目的修改相互干扰。
  • 标签管理: 每个正式版本打上 tag(如 v1.0.0),用于快速回溯和问题定位。
  • 修改备注:
    日常提交, commit 按照模板,明确修改的问题;
    版本发布时,更新 CHANGELOG,记录重点变更。
  • 合并策略:
    合入开发分支 dev 推荐使用merge,确保开发分支保留最完整的修改;
    合入主干分支 master推荐使用覆盖,确保主干分支干净稳定。

分支管理方案

分支命名规则

分支名 说明
master 主版本。永远支持量产能力
Sparrow-dev 开发迭代分支。源自master, 用于所有功能开发的起点。
feature-* 功能分支。源自Sparrow-dev, 用于开发新特性。完成后合并至Sparrow-dev, 并评估是否删除。
Sparrow-* 项目分支。源自Sparrow-dev, 用于立项后的项目开发。完成后合并至Sparrow-dev 和 master, 并评估是否删除。
bugfix-* 修复分支。源自master, 修复量产分支问题,修复后合并至Sparrow-dev和master, 并评估是否删除。

版本号规则: X.Y.Z-[build]

示例:1.3.0-alpha, 路径 version.cmake

# 版本信息
set(VERSION_MAJOR 1)
set(VERSION_MINOR 3)
set(VERSION_REVISION 0)
set(VERSION_PRELEASE "alpha")
  • X: 主版本号。当做了架构上调整或不兼容的 API 修改。
  • Y: 次版本号。当添加了向下兼容的功能性新增。
  • Z: 修订号。当做了向下兼容的问题修正。
  • build: 编译版本号。用于开发阶段编译版本标识,正式发布版本不包含此字段。
    • alpha(内部测试版): 初期测试阶段,主要由内部进行功能验证和缺陷排查。
    • Beta(公测版): 发布给外部用户试用,收集反馈并改进,准备最终发布的阶段。
    • rc (Release Candidate, 候选发布版): Beta 测试后,修复所有已知关键问题的预发布版本,通常非常接近最终产品。
    • GA (General Availability, 正式发布版): 完成所有测试,面向公众正式发布的稳定版本,等同于不带任何后缀的版本号。

分支拉取规则

从功能开发到最终发布, 分支拉取规则如下:

  • 需求分析期 (未立项)
    • Sparrow-dev 拉取分支 feature-xxx分支。
    • feature-xxxversion.cmake 分支次版本号 +1,编译版本号设为alpha (例 1.2.0-rc -> 1.3.0-alpha)。
  • 项目立项 (确定分支名Sparrow-Asia)
    • 合并feature-xxxSparrow-dev, 删除 feature-xxx
    • 然后从Sparrow-dev 拉取项目分支 Sparrow-Asia
    • Sparrow-Asiaversion.cmake 版本号不变,编译版本号为 Beta (1.3.0-alpha -> 1.3.0-Beta)。
  • 项目闭环
    • merge Sparrow-Asia 分支到 Sparrow-dev 分支。
    • 同时将 Sparrow-Asia 分支覆盖到 master 分支,删除 Sparrow-Asia 分支。
    • master 分支中 version.cmake 版本号不变,编译版本号为rc (1.3.0-Beta -> 1.3.0-rc);更新 CHANGELOG;打上tag(例: Tag_v1.3.0)。
  • 紧急修复
    • master 拉取分支 bugfix-xxx 分支。
    • bugfix-xxx 分支中 version.cmake 修订号 +1,编译版本号设为 alpha (例 1.3.0-rc -> 1.3.1-alpha)。
    • 验证完毕后合并至 Sparrow-devmaster 分支。
    • master 分支中 version.cmake 版本号不变,编译版本号为rc (1.3.0.1-alpha -> 1.3.1-rc);更新 CHANGELOG;打上tag (例: Tag_v1.3.1)。

标准流程 (图示)

分支管理

总结

  • 初期项目小,版本管理看似不重要,但随着迭代频繁和团队扩大,混乱的版本管理会直接拖慢交付节奏。
  • 业界有很多成熟的实践,但不同项目(如嵌入式、前端、后端)对分支、发布、协同的需求不同,应根据实际情况灵活调整,建立适合团队自身的版本管理规范。
  • 需要注意的是,分支不宜过多,否则会导致维护乏力,反而影响协作效率,这也是部分管理者不愿意多开分支的原因之一。建议长期保留主干 master 和开发分支 dev,其他稳定版本同步至 master,通过标签 tag 进行标记和管理。
  • 打标签并不只是形式,而是标记每一个功能稳定的版本。因此在打标签时,要确保当前软件测试稳定,且提交准确的重点变更备注。
相关文章
|
运维 算法 调度
系统授权license方案
软件系统设计关于授权时的一点见解
|
6月前
|
缓存 安全 测试技术
基于C#实现Modbus RTU通信
基于C#实现Modbus RTU通信
|
7月前
|
Devops 开发工具 git
【架构基础】互联网大厂Git多分支规范
Git分支管理是通过创建多分支实现并行开发、代码隔离与版本控制的协作模式。以master和develop为核心,结合feature、release、hotfix等分支,规范开发流程,提升团队协作效率与代码质量。
1107 0
|
7月前
|
监控 数据可视化 安全
版本管理与产品迭代:规划、执行、工具与复盘全流程
本文系统阐述如何将产品版本管理从“发布流程”升级为“战略执行工具”,提出战略型、平台型、功能型、维护型四大版本分层体系,结合目标对齐、迭代拆解、风险管控与复盘优化四步法,助力团队实现从被动响应到主动规划的跃迁,提升产品竞争力与研发效能。
|
监控 Linux C++
【实战指南】4步实现C++插件化编程,轻松实现功能定制与扩展(2)
本文是《4步实现C++插件化编程》的延伸,重点介绍了新增的插件“热拔插”功能。通过`inotify`接口监控指定路径下的文件变动,结合`epoll`实现非阻塞监听,动态加载或卸载插件。核心设计包括`SprDirWatch`工具类封装`inotify`,以及`PluginManager`管理插件生命周期。验证部分展示了插件加载与卸载的日志及模块状态,确保功能稳定可靠。优化过程中解决了动态链接库句柄泄露问题,强调了采纳用户建议的重要性。
630 110
【实战指南】4步实现C++插件化编程,轻松实现功能定制与扩展(2)
|
消息中间件 存储 数据采集
4步实现状态机驱动的MQTT客户端,快速接入OneNet (1)
本文介绍了基于状态机驱动的MQTT客户端快速接入OneNet平台的实现方法,通过4步完成模块设计。文章以开源项目`Sparrow`为基础,引入`OneNetMqtt`业务模块,采用事件驱动模型和双层状态机设计,实现设备状态管理、消息处理及定时任务等功能。模块分为三层:`OneNetManager`负责核心逻辑,`OneNetDevice`管理设备信息,`OneNetDriver`处理Socket与MQTT通信。验证结果显示设备连接、数据上报及下线功能正常,稳定性良好。该设计简化了复杂条件判断,增强了系统灵活性与可扩展性,适用于实际项目参考。文末提供源码获取方式,助力读者实践与学习。
852 115
|
运维 监控 测试技术
自动化运维实践:CI/CD流程详解
【6月更文挑战第30天】CI/CD实践推动软件开发自动化,通过持续集成确保代码质量,自动部署提升交付速度。核心流程包括:代码管理(Git等)、自动化构建与测试、代码审查、部署。关键点涉及选择工具、测试覆盖率、监控及团队协作。采用CI/CD能减少错误,但需应对挑战,如工具选型、全面测试和团队沟通。
5739 2
|
安全 测试技术 开发工具
Git协作方案
本文介绍了基于特性分支的Git规范与工作流,涵盖分支管理、开发流程、提交规范及常见问题处理,助力团队高效协作与代码管控。
744 0
|
数据采集 运维 算法
大数据项目管理:从需求分析到成果交付的全流程指南
【4月更文挑战第9天】本文介绍了大数据项目从需求分析到成果交付的全过程,包括需求收集与梳理、可行性分析、项目规划、数据准备与处理、系统开发与集成,以及成果交付与运维。文中通过实例展示了如何进行数据源接入、数据仓库建设、系统设计、算法开发,同时强调了需求理解、知识转移、系统运维的重要性。此外,还提供了Python和SQL代码片段,以说明具体技术实现。在大数据项目管理中,需结合业务和技术,灵活运用这些方法,确保项目的成功执行和价值实现。
3899 1
|
敏捷开发 小程序 持续交付
【规范】Git分支管理,看看我司是咋整的
本文介绍了Git分支管理规范的重要性及其在企业中的应用。通过规范化的分支管理,可加速团队协作、确保代码质量、维护主分支稳定,并支持敏捷开发。文中详细描述了主分支(如master、develop)和辅助分支(如feature、hotfix)的作用,并提供了实际开发流程示例,包括开发前、开发中、提测、预生产和部署上线等阶段的操作方法。旨在帮助团队提高效率和代码质量。
4554 0
【规范】Git分支管理,看看我司是咋整的