4. 分支管理策略:Git Flow、GitHub Flow 在嵌入式固件开发中的应用
说到分支管理,我见过太多团队在这上面栽跟头了。有的项目分支乱得像蜘蛛网,有的干脆就一个 master 分支裸奔。嗯,这两种极端都不对。嵌入式固件开发有其特殊性——硬件依赖、多版本并存、紧急修复频繁,选对分支策略能让你少掉不少头发。
4.1 为什么嵌入式开发需要分支策略?
你想想看,一个嵌入式项目通常要同时维护多个硬件版本。老产品还在产线上跑,新版本已经在开发了。中间还可能冒出个紧急 bug,需要立刻修复。没有分支管理,这些工作全挤在一个分支上,不出乱子才怪。
我个人习惯把分支策略比作「交通规则」。没有规则,大家乱开,早晚撞车。有了规则,虽然要等红灯,但整体效率反而更高。
核心原则:分支策略不是束缚,而是保护。它保护你的稳定版本不被破坏,也保护你的开发工作不被干扰。
4.2 Git Flow:适合复杂嵌入式项目
Git Flow 是我在大型嵌入式项目中用得最多的策略。它分支多,规则严,但对付复杂场景特别好使。
4.2.1 核心分支结构
| 分支类型 | 命名示例 | 用途 |
|---|---|---|
| master | master | 只存放发布版本,每个提交都对应一个生产版本 |
| develop | develop | 日常开发的主分支,所有功能分支都从这里拉出 |
| feature | feature/usb-stack | 开发新功能,完成后合并回 develop |
| release | release/v2.1.0 | 发布前的准备分支,只做 bug 修复和文档更新 |
| hotfix | hotfix/crc-bug | 紧急修复生产环境的问题,修复后同时合并到 master 和 develop |
4.2.2 嵌入式场景实战
我在做一个车载 MCU 项目时,就严格用了 Git Flow。当时的情况是这样的:
- feature 分支:每个新功能(比如 CAN 总线驱动、OTA 升级模块)都在独立分支上开发。互不干扰,想怎么改都行。
- release 分支:功能开发完,合并到 develop 后,拉出 release/v2.1.0。这个分支只修 bug,不加新功能。测试团队就在这个分支上跑。
- hotfix 分支:有一次客户反馈设备偶发死机。我立刻从 master 拉出 hotfix/task-stack-overflow,定位到是任务栈分配不足。修完合并回 master 和 develop,整个过程不到 4 小时。
我的建议:嵌入式项目如果硬件版本多(比如 V1.0、V2.0 同时在产),Git Flow 是首选。它能让每个硬件版本都有清晰的维护分支。
4.3 GitHub Flow:轻量级选择
GitHub Flow 就简单多了。它只有 master 一个长期分支,所有开发都在 feature 分支上完成,然后通过 Pull Request 合并。
4.3.1 工作流程
- 从 master 拉出 feature 分支
- 在 feature 分支上开发、提交
- 发起 Pull Request,进行代码审查
- 审查通过后合并到 master
- 立即部署或发布
4.3.2 适合什么场景?
说实话,GitHub Flow 更适合互联网项目那种「随时发布」的模式。嵌入式开发中,我只有在做原型验证或小工具项目时才用它。
为什么?因为嵌入式固件很少能做到「随时发布」。你想想看,固件发布前要经过编译、烧录、硬件测试、环境测试,一套流程下来少说半天。GitHub Flow 那种「合并即发布」的节奏,在嵌入式领域不太现实。
避坑指南:我曾经在一个 IoT 项目里硬套 GitHub Flow,结果发现 master 分支上全是半成品。因为测试跟不上发布节奏,合并后的代码根本来不及验证。后来还是换回了 Git Flow。
4.4 嵌入式场景的特殊考量
4.4.1 硬件版本分支
嵌入式开发有个特点:不同硬件版本可能对应不同的代码。比如 V1.0 板子用 STM32F103,V2.0 换成了 STM32F407。这时候我建议:
- 每个硬件版本维护一个长期分支,比如
hw/v1.0、hw/v2.0 - 公共代码放在 develop 分支,通过条件编译或抽象层处理差异
- 紧急修复时,从对应硬件分支拉 hotfix
4.4.2 固件版本号与分支对应
我个人习惯用语义化版本号(SemVer)来命名 release 分支:
release/v1.2.0 # 主版本.次版本.修订号
hotfix/v1.2.1 # 紧急修复版本
这样一看分支名,就知道这个版本是干什么的。嗯,这个习惯帮我省了不少查日志的时间。
4.5 我的推荐方案
如果你问我嵌入式项目到底该用哪个?我的回答是:看项目复杂度。
| 项目类型 | 推荐策略 | 原因 |
|---|---|---|
| 单芯片、单版本的小项目 | GitHub Flow 简化版 | 分支少,管理成本低 |
| 多硬件版本、多团队协作 | Git Flow | 分支隔离好,版本管理清晰 |
| 既有产品维护,又有新平台开发 | Git Flow + 硬件分支 | 能同时处理多个硬件版本 |
最后说一句:分支策略是工具,不是教条。我见过有人把 Git Flow 用得比 GitHub Flow 还简单,也见过有人把 GitHub Flow 玩出花来。关键是找到适合你团队节奏的那一套。
记住,分支管理的目的只有一个:让代码变更可追溯、可回滚、可并行。只要做到这三点,用什么策略都行。