语义化版本规范

1. 概念

语义化版本规范(SemVer Semantic Versioning)是 GitHub 起草的一个具有指导意义的、统一的版本号表示规范。它规定了版本号的表示、增加和比较方式,以及不同版本号代表的含义。

在这套规范下,版本号及其更新方式包含了相邻版本间的底层代码和修改内容的信息。语义化版本格式为:主版本号.次版本号.修订号(X.Y.Z),其中 XYZ 为非负的整数,且禁止在数字前方补零。

2. 规则

版本号可按以下规则递增:

  • 主版本号(MAJOR):当做了不兼容的 API 修改。
  • 次版本号(MINOR):当做了向下兼容的功能性新增及修改。这里有个不成文的约定需要你注意,偶数为稳定版本,奇数为开发版本。
  • 修订号(PATCH):当做了向下兼容的问题修正。

你可能还看过这么一种版本号:v1.2.3-alpha。这其实是把先行版本号(Pre-release)和版本编译元数据,作为延伸加到了主版本号.次版本号.修订号的后面,格式为 X.Y.Z[-先行版本号][+版本编译元数据],如下图所示:

语义化版本规范_第1张图片我们来分别看下先行版本号和版本编译元数据是什么意思。

先行版本号意味着,该版本不稳定,可能存在兼容性问题,格式为:X.Y.Z-[一连串以句点分隔的标识符] ,比如下面这几个例子:

1.0.0-alpha
1.0.0-alpha.1
1.0.0-0.3.7
1.0.0-x.7.z.92

编译版本号,一般是编译器在编译过程中自动生成的,我们只定义其格式,并不进行人为控制。下面是一些编译版本号的示例:

1.0.0-alpha+001
1.0.0+20130313144700
1.0.0-beta+exp.sha.5114f85

注意,先行版本号和编译版本号只能是字母、数字,且不可以有空格。

3. 规范

  • 标记版本号的软件发行后,禁止改变该版本软件的内容,任何修改都必须以新版本发行。
  • 主版本号为零(0.y.z)的软件处于开发初始阶段,一切都可能随时被改变,这样的公共 API 不应该被视为稳定版。1.0.0 的版本号被界定为第一个稳定版本,之后的所有版本号更新都基于该版本进行修改。
  • 修订号 Zx.y.Z | x > 0)必须在只做了向下兼容的修正时才递增,这里的修正其实就是 Bug 修复。
  • 次版本号 Yx.Y.z | x > 0)必须在有向下兼容的新功能出现时递增,在任何公共 API 的功能被标记为弃用时也必须递增,当有改进时也可以递增。其中可以包括修订级别的改变。每当次版本号递增时,修订号必须归零。
  • 主版本号 XX.y.z | X > 0)必须在有任何不兼容的修改被加入公共 API 时递增。其中可以包括次版本号及修订级别的改变。每当主版本号递增时,次版本号和修订号必须归零。

4. 如何确定版本号

  • 在实际开发的时候,建议你使用 0.1.0 作为第一个开发版本号,并在后续的每次发行时递增次版本号。
  • 当我们的版本是一个稳定的版本,并且第一次对外发布时,版本号可以定为 1.0.0
  • 当我们严格按照 Angular commit message 规范提交代码时,版本号可以这么来确定:
  1. fix 类型的 commit 可以将修订号 +1。
  2. feat 类型的 commit 可以将次版本号 +1。
  3. 带有 BREAKING CHANGEcommit 可以将主版本号 +1。

语义版本规范完全说明

你可能感兴趣的:(#,简要记录,语义规范)