语义化版本是指一种版本号规范,用于标识软件包的版本及其更新情况。
版本 | 描述 | 时间 |
---|---|---|
v1.0.0 | … | 2024-07-15 11:11 |
语义化版本的核心要点包括以下几个方面:
版本号的格式:
Major(主版本号)
Major 版本号是语义化版本中的第一个数字,用于表示软件的主要版本变更。
当进行大规模的、不兼容的变更时,应该增加 Major 版本号。
主要变更包括:
- 不兼容的API更改: 当你修改了软件的API,以至于旧版本的代码无法与新版本一起正常工作时,应该升级 Major
版本号。这可能包括删除、更改或添加API端点、参数或行为。 - 重大功能新增: 如果你引入了重要的新功能,这可能会改变用户的工作流程或提供新的能力,也应该升级Major版本号。
- 废弃旧功能: 当你计划废弃或删除旧的功能时,通常需要增加Major版本号,以提醒用户进行迁移。
示例:
假设有一个虚构的图形处理库,当前版本号为v1.0.0
。
如果开发团队决定删除现有API中的一个核心功能,这将导致现有的用户无法升级到新版本而不修改其代码,那么新版本的版本号应该升级到v2.0.0
。
Minor(次版本号)
Minor 版本号是语义化版本中的第二个数字,用于表示向后兼容的新功能添加。Minor 版本号的变更包括:
- 新增功能: 当你向软件添加新的功能,但这些功能不会破坏现有的API或功能,应该增加Minor版本号。
- 改进现有功能: 如果你对现有功能进行了改进,但这些改进不会导致现有用户的代码无法工作,也应该升级Minor版本号。
- 向后兼容的API增强: 如果你增加了现有API的参数、选项或能力,而这不会破坏已有的使用方式,也应该升级Minor版本号。
示例:
继续以图形处理库为例,当前版本号为v1.2.0
。
开发团队决定在库中添加一个全新的图像滤镜功能,但这不会破坏任何现有功能或 API。在这种情况下,版本号应升级到v1.3.0
。
Patch(修订版本号)
Patch版本号是语义化版本中的第三个数字,用于表示向后兼容的错误修复或小的改进。Patch版本号的变更包括:
- 错误修复: 当你解决现有功能或API中的错误时,应该升级Patch版本号。这些修复不应引入新的功能或改变现有的行为。
- 性能优化: 如果你对现有功能进行性能优化,而不会改变其行为,也应该升级Patch版本号。
- 小的改进或修改: 如果你进行了一些小的改进,但它们不会破坏向后兼容性,应该升级Patch版本号。
示例:
继续以图形处理库为例,当前版本号为v1.2.3
。
在测试中发现一个重要的
Bug,它导致图像处理不正确。开发团队修复了这个问题,没有引入新的功能或改变现有功能,版本号应该升级到v1.2.4
。
版本号的比较:
语义化版本号可以通过比较其各个数字来确定版本的更新情况。
具体来说,当两个版本号的主版本号不同,表示向后不兼容的改变;
当两个版本号的主版本号相同但次版本号不同,表示向后兼容的改变;
当两个版本号的主版本号和次版本号相同但修订号不同,表示向后兼容的问题修正。
版本号的预发布标识:
语义化版本号还可以包含预发布标识(如 alpha
、beta
、rc
等),用于标识开发阶段或测试版本。
预发布标识应该紧跟在版本号后面,并以连字符 -
分隔。
版本号的元数据:
语义化版本号还可以包含元数据(如 git commit hash
、build timestamp
等),
用于标识构建信息或其他元数据。元数据应该紧跟在版本号或预发布标识后面,并以加号 +
分隔。
通过遵循语义化版本的规范,软件包的开发者可以更好地管理版本号及其更新情况,从而提高软件包的可维护性和可用性。
此外,语义化版本的规范也被广泛地应用于各种软件开发工具和系统中,如
npm
、pip
等。