Skip to content

Semver 语义化版本 2.0.0

记住,版本号不是随机数,别瞎随机生成。请严格遵守Semver规范(主要是少挨骂😂)!

版本格式

  • major.minor.patch
  • 主版本号.次版本号.补丁号

版本号递增规则

  • 主版本号:当你做了不兼容的 API 修改。
  • 次版本号:当你做了向下兼容的功能性新增。
  • 补丁号:当你做了向下兼容的问题修正。

先行版本号及版本编译信息可以加到主版本号.次版本号.补丁号的后面,作为延伸。

规则

  • 版本号只能递增,不能回退。也就是说下一个版本号必须大于当前版本号。
  • 版本号的高位增加,低位的要清零
  • 例如,1.2.3 增加主版本号,应该是 2.0.0,而不是 2.2.3。

版本后缀

  • Alpha 版本(alpha)

    这是软件开发的早期阶段,通常是在内部测试阶段。Alpha 版本可能包含基本的功能,但可能存在许多错误和缺陷。

  • Beta 版本(beta)

    相对于 Alpha 版本的下一阶段,通常是向有限的外部用户群进行测试。在 Beta 阶段,开发人员通常修复了一些已知的问题,但仍可能存在未发现的问题。

  • 候选版本(通常缩写为 rc)

    是一个预发布的版本,认为它可能是最终发布的版本,除非发现严重问题。RC 版本之后通常不再添加新功能,而主要集中在解决潜在的 bug。

  • 正式版本(release)

    正式版本是最终发布的版本,它已经通过了所有的测试阶段,并被认为是相对稳定和可靠的版本。正式版本通常是面向广大用户的版本。

  • 稳定版本(stable)

    有些项目可能使用稳定版本这个术语来表示经过一段时间测试并证明稳定性的版本,相对于一些可能仍在开发中的较新版本。

语义化版本控制规范

1️⃣ 《标准版本号》

标准版本号必须采用 X.Y.Z 的格式,其中 X/Y/Z 为非负的整数,且禁止在数字前方补零。

  • X 是主版本号、Y 是次版本号、而 Z 为修订号。
  • 每个元素必须以数值来递增。
  • 例如:1.9.1 -> 1.10.0 -> 1.11.0

2️⃣ 标记版本号的软件发行后,禁止改变该版本软件的内容。任何修改都必须以新版本发行。

3️⃣ 《主版本号为零》

主版本号为零(0.y.z)的软件处于开发初始阶段,一切都可能随时被改变。这样的公共 API 不应该被视为稳定版。

4️⃣ 《1.0.0 版本》

1.0.0 的版本号用于界定公共 API 的形成。这一版本之后所有的版本号更新都基于公共 API 及其修改内容。

5️⃣ 《修订号》

修订号 Z(x.y.Z | x > 0)必须在只做了向下兼容的修正时才递增。这里的修正指的是针对不正确结果而进行的内部修改。

6️⃣ 《次版本号》

次版本号 Y(x.Y.z | x > 0)必须在有向下兼容的新功能出现时递增。

  • 在任何公共 API 的功能被标记为弃用时也必须递增。
  • 也可以在内部程序有大量新功能或改进被加入时递增,其中可以包括修订级别的改变。
  • 每当次版本号递增时,修订号必须归零。

7️⃣ 《主版本号》

主版本号 X(X.y.z | X > 0)必须在有任何不兼容的修改被加入公共 API 时递增。

  • 其中可以包括次版本号及修订级别的改变。
  • 每当主版本号递增时,次版本号修订号必须归零。

8️⃣ 《先行版本号》

先行版本号可以被标注在修订版之后,先加上一个连接号再加上一连串以句点分隔的标识符来修饰。

  • 标识符必须由 ASCII 字母数字和连接号[0-9A-Za-z-]组成,且禁止留白。
  • 数字型的标识符禁止在前方补零。
  • 先行版的优先级低于相关联的标准版本。
  • 被标上先行版本号则表示这个版本并非稳定而且可能无法满足预期的兼容性需求。
  • 范例:1.0.0-alpha1.0.0-alpha.11.0.0-0.3.71.0.0-x.7.z.92

语义化版本含义

代码状态阶段规则示例
首次发布新产品从 1.0.0 开始1.0.0
修复向后兼容的bug补丁版本递增第三位数字1.0.1
向后兼容的新功能次要版本递增中间数字并将最后一位数字重置为零1.1.0
破坏向后兼容性的更改主要版本递增第一位数字并将中间和最后一位数字重置为零2.0.0

依赖范围符号

  • ^ :"主版本不变就行"(最常用),允许次版本号 (Minor) 和修订号 (Patch) 更新。
  • ~ :"只修 Bug,不加功能"(更保守),只允许修订号 (Patch) 更新。
  • = :"锁死这个版本",精确匹配版本号(通常省略 = 直接写版本号)。
  • * :"随便来一个"(危险),匹配任意版本。

版本范围

版本号:major.minor.patch -> 主版本号.次版本号.补丁号

符号案例范围
^^1.2.3>=1.2.3 < 2.0.0
~~1.2.3>=1.2.3 < 1.3.0
-1.2.3 - 2.3.4>=1.2.3 <= 2.3.4
== 1.2.31.2.3
<<1.2.3<1.2.3
>>1.2.3>1.2.3
>=>=1.2.3>=1.2.3
<=<=1.2.3<=1.2.3
||0.14.x || 15.x.x>=0.14.0 < 0.15.0||>=15.0.0 <16.0.0
major.x1.x>=1.0.0 < 2.0.0
major.x.x1.x>=1.0.0 < 2.0.0
major.*1.*>=1.0.0 < 2.0.0
*"*"任意版本,总是获取最新版,最危险

参考资料