语义化版本控制(Semantic Versioning,简称 SemVer)是一种广泛采用的版本号管理规范,旨在通过版本号传达软件更新的性质和影响,帮助开发者和用户理解每次发布的变更内容
🔢 版本号结构
语义化版本号通常采用 主版本号.次版本号.修订号
的格式,例如:1.4.2
。
-
主版本号(Major):当进行不兼容的 API 修改时递增。
-
次版本号(Minor):当添加向下兼容的新功能时递增。
-
修订号(Patch):当进行向下兼容的问题修正时递增。
例如,从 1.4.2
更新到 2.0.0
表示存在破坏性变更。
🧪 预发布版本和构建元数据
语义化版本还支持添加预发布标签和构建元数据,以提供更多信息:
-
预发布版本(Pre-release):在版本号后添加连字符和标识符,如
1.0.0-alpha
、1.0.0-beta.2
,表示该版本尚未稳定,可能不适合生产环境。 -
构建元数据(Build Metadata):在版本号后添加加号和标识符,如
1.0.0+20130313144700
,用于标识构建信息,不影响版本优先级。
预发布版本的优先级低于其对应的正式版本。例如:
matlab
复制编辑
1.0.0-alpha < 1.0.0-beta < 1.0.0
📈 版本号递增规则
根据语义化版本规范,版本号的递增应遵循以下规则:
-
修订号(Patch):当进行向下兼容的问题修正时递增。
-
次版本号(Minor):当添加向下兼容的新功能时递增。
-
主版本号(Major):当进行不兼容的 API 修改时递增。
每次递增主版本号或次版本号时,后面的数字应归零。例如,从 1.2.3
更新到 2.0.0
表示存在不兼容的更改。
🔍 版本优先级比较
在比较两个版本的优先级时,遵循以下规则:
-
首先比较主版本号、次版本号和修订号,数值大的优先级高。
-
如果这些部分相同,则比较预发布版本:预发布版本的优先级低于正式版本。
-
预发布版本之间按标识符逐个比较,数字按数值比较,字母按 ASCII 排序。
-
例如:
matlab
复制编辑
1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-beta < 1.0.0
✅ 实践建议
-
明确公共 API:在发布版本前,明确并记录公共 API,以便根据变更影响正确递增版本号。
-
遵循规范:严格按照语义化版本控制规范递增版本号,确保用户能够根据版本号判断更新的影响。
-
使用自动化工具:如
semantic-release
等工具可以根据提交信息自动管理版本号和发布流程,提高效率。
详细参考semver