3. 座舱软件版本与分支管理策略

座舱软件不是单一代码库,而是由高通基线、车厂定制层、应用功能层和发布交付层叠加而成的多源体系。分支管理如果只按“开发、测试、发布”三条线粗放划分,很快会出现基线漂移、补丁丢失、定制冲突和追溯断链。本节围绕高通基线版本、车厂定制分支、功能分支与发布分支的规划,以及版本命名与追溯规则,给出一套可直接落地的组织方式。

一、四类分支的职责边界

座舱项目的分支体系通常由四类分支构成,它们不是并列关系,而是“上游供给—定制叠加—功能开发—发布冻结”的层次关系。

  • 高通基线分支(baseline):对应高通发布的 BSP/HLOS 版本,例如 qcom/msmnile/LA.UM.9.12.r1-08000。它是只读上游,不允许车厂直接在其上提交业务代码,只允许以补丁或 cherry-pick 方式引入高通后续修复。
  • 车厂定制分支(platform/custom):从某个高通基线切出,承载车厂硬件差异、HAL 适配、开机动画、系统裁剪、安全策略等平台级定制。它对应“一个车型平台一条定制线”。
  • 功能分支(feature):从车厂定制分支切出,承载单个功能或单个域的开发,例如 feature/hmi-launcher、feature/audio-zone、feature/carplay。生命周期短,合并后即删除。
  • 发布分支(release):从车厂定制分支在某个冻结点切出,只接受缺陷修复和发布相关变更,不接受新功能。它对应“一个可交付版本一条发布线”。

关键原则是:功能分支只向定制分支合并,发布分支只从定制分支切出并只接受修复。任何跨层直接提交都会破坏追溯链。

座舱软件分支层次与流向 高通基线分支 baseline LA.UM.9.12.r1-08000 · 只读上游 · 仅接受补丁/cherry-pick 上游供给 切出 车厂定制分支 platform/custom HAL适配 · 硬件差异 · 系统裁剪 · 安全策略 · 一平台一条线 定制叠加 功能分支 feature/* feature/hmi-launcher feature/audio-zone · feature/carplay 发布分支 release/* release/8295-2024Q3 仅缺陷修复 · 不接受新功能 切出开发 合并回定制(MR/PR) 冻结切出 修复回流 追溯链:release tag → custom commit → baseline tag → 高通补丁号 每个发布版本必须能反向定位到定制提交、基线版本与上游补丁来源

二、版本命名与追溯规则

版本命名必须同时承载“平台、基线、定制、发布”四层信息,否则追溯只能靠人工翻记录。推荐采用如下命名格式:

<平台代号>-<基线版本>-<定制序号>-<发布序号>
示例:8295-LA.UM.9.12.r1-08000-C03-R05

8295        : 车型平台代号(对应车厂定制分支)
LA.UM.9.12.r1-08000 : 高通基线版本
C03         : 车厂定制分支第3次平台级变更
R05         : 该定制线上的第5个发布版本

对应的 Git 标签建议使用 v8295-C03-R05,并在标签注释中写入:基线 commit、定制分支 HEAD、发布分支 HEAD、关联的高通补丁列表。这样任何一个发布版本都能通过标签注释反向定位到完整来源。

追溯规则要落到三个具体动作上:

  1. 基线变更必须记录补丁号:每次从高通引入修复,在定制分支的提交信息中写明 QCOM-PATCH: <补丁编号>,便于后续核对是否遗漏。
  2. 功能合并必须关联需求号:功能分支合并到定制分支时,提交信息包含 FEATURE: <需求ID>,发布时可按需求号筛选变更集。
  3. 发布分支只接受修复提交:修复提交信息包含 FIX: <缺陷ID>,并注明影响的发布版本范围,避免修复漏合到其他发布线。

三、分支规划的实际操作要点

规划阶段最容易出问题的是“定制分支与发布分支的切出时机”。建议以车型平台的软件冻结点为界:冻结前,所有功能在功能分支开发并合并到定制分支;冻结时,从定制分支切出发布分支,此后定制分支继续接受下一版本的功能,发布分支只接受修复。这样定制分支始终向前,发布分支保持稳定。

另一个要点是基线升级策略。高通基线不会频繁大版本跳变,但会持续发布补丁。建议每季度评估一次基线补丁合并,合并时在定制分支上以独立提交完成,并打上 baseline-sync-YYYYQN 标签。这样当某个发布版本出现底层问题时,可以快速判断是否与某次基线同步相关。

分支数量要控制。一个车型平台通常只保留一条定制分支、一条当前发布分支和若干短期功能分支。历史发布分支在停止维护后应打标签归档并删除分支,避免分支列表膨胀导致误操作。
禁止在发布分支上直接开发新功能,也禁止把功能分支直接合并到发布分支。这两类操作会破坏“发布分支只含修复”的约束,导致后续修复无法干净地回流到定制分支。

四、版本命名与追溯检查表

发布前可用下表快速核对版本命名与追溯信息是否完整。表中字段为示例,实际项目可按平台调整。

检查项要求示例
版本号格式平台-基线-定制-发布8295-LA.UM.9.12.r1-08000-C03-R05
Git 标签与版本号对应v8295-C03-R05
基线 commit标签注释中记录a1b2c3d
定制分支 HEAD标签注释中记录e4f5g6h
高通补丁列表标签注释中列出PATCH-1024, PATCH-1088
需求关联合并提交含需求号FEATURE: CAR-2317
修复关联修复提交含缺陷号FIX: BUG-5521

把上述规则固化到 CI 流程中,可以在每次打标签时自动校验版本号格式、标签注释完整性和提交信息关键字。校验不通过则拒绝生成发布包,从机制上保证追溯链不断裂。分支管理的价值不在于分支数量,而在于每个版本都能被准确还原、每个变更都能被定位来源。