在嵌入式开发中,固件与硬件强耦合、发布周期长、多版本并行维护,混乱的版本管理会显著增加调试成本与风险。
Semantic Versioning 2.0.0(语义化版本,简称 SemVer) 正是解决此问题的规范。它通过版本号直观表达代码变更的含义,让开发者、测试与硬件工程师都能快速判断兼容性。
SemVer 是一套让版本号变动传递明确信息的命名规范,旨在解决依赖混乱。
一、 基础格式(核心)
版本号格式为:MAJOR.MINOR.PATCH(主版本号.次版本号.补丁版本号)。
三者均为非负整数,且禁止前导零。
-
MAJOR(主版本号)
当进行不兼容的破坏性变更时递增,次版本号与补丁版本号归零。
嵌入式场景:更换不兼容的MCU(如F4→H7)、删除或重命名核心API、修改通信协议。
-
MINOR(次版本号)
当新增向后兼容的功能时递增,补丁版本号归零。
嵌入式场景:新增传感器驱动、增加通信接口、优化性能但不改变原有接口。
-
PATCH(补丁版本号)
当进行向后兼容的Bug修复时递增。
嵌入式场景:修复串口丢包、修正传感器校准误差、解决死机重启等稳定性问题。
二、 扩展格式(嵌入式常用)
基础格式可扩展为:MAJOR.MINOR.PATCH-PRERELEASE+BUILD
-
预发布版本(PRERELEASE)
通过连字符
-附加,表示稳定性较低的测试版本。常用标识 :
alpha(内部测试)、beta(公开测试)、rc(候选发布)。示例 :
v1.0.0-beta.1 -
构建元数据(BUILD)
通过加号
+附加,用于构建追溯,不影响版本优先级排序。常用信息:Git提交哈希、构建时间戳、硬件版本标识。
示例 :
v1.2.3+20250205、v1.2.3+PCBv1.1
三、 嵌入式场景示例
| 版本号 | 含义与场景说明 |
|---|---|
v0.1.0 |
初始开发版,实现基础功能(如点灯),API可能变动。 |
v0.2.0-alpha.1 |
内部测试版,新增功能但存在已知Bug。 |
v0.2.0 |
正式发布版,新增功能且向后兼容v0.1.0。 |
v0.2.1 |
补丁版本,修复v0.2.0中的Bug,完全兼容。 |
v1.0.0 |
第一个稳定量产版本,API固化。 |
v1.1.0+PCBv1.1 |
新增功能,并特别适配PCBv1.1硬件。 |
v2.0.0 |
破坏性更新,不兼容所有v1.x.x版本,对应新硬件或架构重构。 |