3. 版本分支策略:Git Flow、Trunk Based Development等主流分支模型在EPS项目中的选择与适配

版本分支策略,说白了就是团队怎么协作写代码的规矩。我见过不少EPS项目,一开始没定好分支策略,结果合并冲突比代码还多,发布时手忙脚乱。今天咱们聊聊几种主流模型,以及它们在EPS项目里怎么落地。

3.1 为什么EPS项目需要分支策略?

EPS软件不是普通的嵌入式系统。它涉及功能安全、多版本并行、长期维护。你想想看,一个车型可能同时有3个版本在开发:当前量产版、下一年小改款、下一代大改款。没有分支策略,代码库就是一团乱麻。

我个人习惯,在项目启动第一天就定好分支模型。因为后期改分支策略,成本极高。我曾经在一个项目里,团队用了半年的Git Flow,突然要切到Trunk Based,结果光迁移就花了两周,还丢了几个hotfix记录。

3.2 Git Flow:经典但偏重

Git Flow是2010年左右的经典模型。它有5种分支:master、develop、feature、release、hotfix。结构清晰,但流程较长。

分支类型 用途 生命周期
master 生产就绪代码 永久
develop 日常开发集成分支 永久
feature 新功能开发 短期(几天到几周)
release 发布前准备 短期(几天)
hotfix 紧急修复生产问题 极短(几小时到几天)

在EPS项目中的适配:

  • 适合场景:多版本并行维护、功能安全认证需要严格追溯的场景。比如一个EPS项目同时维护v1.0(量产)、v1.1(小改款)、v2.0(全新架构)。
  • 避坑指南:我曾经见过团队把feature分支开了一堆,结果合并到develop时冲突不断。建议feature分支不要超过3天,否则就定期从develop rebase。
  • 我的建议:如果团队规模小于10人,Git Flow可能太重了。release分支和develop分支的合并操作,每周至少多花2小时在分支管理上。

核心要点:Git Flow适合需要严格版本追溯的EPS项目,但不要滥用feature分支。每个feature分支应该对应一个JIRA ticket,合并时保留完整提交历史。

3.3 Trunk Based Development:轻量但要求高

Trunk Based Development(TBD)强调所有开发者在主干(trunk/main)上工作。分支只存在几小时,最多一两天。它要求团队有很强的持续集成能力和自动化测试覆盖。

在EPS项目中的适配:

  • 适合场景:快速迭代、持续交付的EPS项目。比如互联网车企的OTA升级项目,每周都要发布新版本。
  • 挑战:EPS涉及功能安全,有些修改需要评审和测试周期。如果所有代码都直接上主干,风险较高。
  • 我的经验:我在一个EPS项目中尝试过TBD,但发现功能安全相关的代码(比如扭矩监控模块)还是需要走分支评审。后来我们做了折中:普通代码走TBD,安全关键代码走短分支(最多1天)。

实用技巧:如果选择TBD,一定要配上feature toggle(特性开关)。这样不完整的代码可以合入主干,但通过开关控制是否生效。我习惯用配置文件+编译宏双重控制,确保安全。

3.4 其他分支模型

除了上面两种,还有几个模型值得了解:

  • GitHub Flow:简化版Git Flow,只有master和feature分支。适合小型团队,但EPS项目用起来有点吃力,因为缺少release分支管理。
  • GitLab Flow:在GitHub Flow基础上增加了环境分支(如staging、production)。适合有明确部署环境的EPS项目。
  • Release Branching:以发布为中心,每个版本一个分支。适合长期维护的EPS产品,比如一个EPS平台要支持5年。

3.5 EPS项目的选择与适配建议

说了这么多,到底怎么选?我根据经验总结了一个决策矩阵:

项目特征 推荐模型 原因
多版本并行维护(3个以上) Git Flow release分支和hotfix分支能清晰管理每个版本
快速迭代(2周内发布) Trunk Based 减少分支合并开销,加速交付
功能安全要求高(ASIL-D) Git Flow + 短feature分支 需要严格评审和追溯,但分支不宜过长
团队小于5人 GitHub Flow 简单够用,减少管理成本
OTA持续交付 Trunk Based + feature toggle 支持频繁发布,同时控制风险

重要提醒:不要照搬理论模型。我曾经见过一个团队严格按照Git Flow的图来操作,结果每次合并都要开5个分支。记住,分支策略是为项目服务的,不是反过来。根据实际情况做裁剪,比如去掉release分支,用tag代替。

3.6 实战:EPS项目的分支命名规范

不管选哪种模型,分支命名规范一定要统一。我推荐以下格式:

# 功能分支
feature/EPS-1234-add-torque-sensor-support

# 修复分支
fix/EPS-5678-fix-overcurrent-protection

# 发布分支
release/v1.2.3

# 热修复分支
hotfix/v1.2.1-critical-safety-fix

# 实验分支
experiment/steering-angle-prediction-v2

嗯,这里要注意:分支名里一定要包含JIRA ticket号。这样追溯起来特别方便。我曾经在一个项目里,没有加ticket号,结果半年后看分支,完全不知道当时为什么要改。

3.7 我的最终建议

如果你现在要启动一个EPS项目,我建议这样:

  1. 起步阶段:用Git Flow的简化版(master + develop + feature + hotfix)。去掉release分支,用tag代替。
  2. 团队成熟后:逐步向Trunk Based过渡。先让非安全关键模块走TBD,安全模块保持短分支。
  3. 长期维护:建立分支清理机制。每周清理一次已合并的分支,避免分支泛滥。

记住,没有完美的分支策略,只有适合当前团队和项目的策略。多试、多调整,找到自己的节奏。