一般使用 语义化版本规范(SemVer,Semantic Versioning),即 主版本号.次版本号.修订号
(X.Y.Z,其中 X、Y 和 Z 为非负的整数,且禁止在数字前方补零)。
也有先行版本号与编译版本号 v1.2.3-aplha.1+001
:即把先行版本号(Pre-release)和版本编译元数据,作为延伸加到了主版本号.次版本号.修订号的后面:X.Y.Z[-先行版本号][+版本编译元数据]
。
- 主版本号(MAJOR):不兼容的 API 修改。
- 必须在有任何不兼容的修改被加入公共 API 时递增。其中可以包括次版本号及修订级别的改变。每当主版本号递增时,次版本号和修订号必须归零。
- 主版本号为零(0.y.z)的软件处于开发初始阶段,由于一切都可能随时被改变,不应该被视为稳定版。
1.0.0
被界定为第一个稳定版本,之后的所有版本号更新都基于该版本修改。
- 次版本号(MINOR):向下兼容的功能性新增及修改。一般偶数为稳定版本,奇数为开发版本。在任何公共 API 功能被标记为弃用时也必须递增,当有改进时也可以递增。其中可以包括修订级别的改变。每当次版本号递增时,修订号必须归零。
- 修订号(PATCH):向下兼容的问题修正,即 bug 修复。
- 先行版本号:该版本不稳定,可能存在兼容性问题。
- 编译版本号:编译器在编译过程中自动生成,开发者只定义其格式、不进行人为控制。
使用建议:
- 使用 0.1.0 作为首个开发版本号,在后续每次发行时递增次版本号。
- 稳定版本并第一次对外发布时版本号可定为 1.0.0。
- 严格按照 Angular commit message 规范提交代码时:
- fix 类型的 commit 可将修订号 +1。
- feat 类型的 commit 可将次版本号 +1。
- 带 BREAKING CHANGE 的 commit 可将主版本号 +1。
# 自动生成
IAM 项目采用 gsemver 自动生成版本号,参考 iam/ensure_tag.sh (opens new window)。
Makefile 和 Shell 脚本用到的所有版本号使用 iam/common.mk (opens new window) 中的 VERSION 变量。
VERSION := $(shell git describe --tags --always --match='v*')
# 执行 git describe 时,符合条件的 tag 指向最新提交,则只显示 tag 的名字,否则会有相关的后缀描述该 tag 后有多少次提交,以及最新的提交 commit id。比如 v1.0.0-3-g1909e47:
# 3:表示自打 tag v1.0.0 以来有 3 次提交。
# g1909e47:g 为 git 的缩写,在多种管理工具并存的环境中很有用处。
# 1909e47:7 位字符表示为最新提交的 commit id 前 7 位。
1
2
3
4
5
6
2
3
4
5
6