我们先来说说版本号。可以参考 semantic version 的规范,它的规则很简单,总结起来就是下面几条:
- 使用 semver 的软件必须定义公开、严谨、易于理解的 API。也就是模块要提供功能给用户。
- 版本号格式为:
X.Y.Z
,并且 X、Y、Z 均为正整数并且不断递增。X 表示大版本(major)、Y 表示小版本(minor)、Z 表示补丁版本(patch)。 - 一个版本发布后,此版本内容不能再变更,变更必须再发布一个新版本。也就是不能覆盖发布。
0.Y.Z
表示初始版本,这种版本下的 API 不能保证稳定,随时可能变更。- 当进行了向后兼容的 bug 修复时,补丁版本 Z 必须增加。
- 当引入了向后兼容的新功能时,小版本 Y 必须增加,同时 Z 必须重置为 0(小版本里面可能会包含 bug 修复)。
- 当引入了不兼容的变更时,大版本 X 必须增加,同时 Y、Z 必须重置为 0(大版本里面可能会包含小版本或者补丁版本的改动)。
X.Y.Z
后面还可以加预发布版本号、构建信息,格式为:X.Y.Z-pre_lease+build_meta
,比如:1.0.0-alpha+20151226
、1.0.0-beta.2+20151230
进行版本号比较时,遵循下面的规则:
1)依次按数值比较 X、Y、Z 的值,直到第一个不同的位置;
2)如果两个版本的 X、Y、Z 都相等,含有 pre-release
版本号的较小;
3)如果两个版本的 X、Y、Z 都相等并且都含有 pre-release
版本号,要单独比较 pre-release
版本。比如:
1.0.0
< 2.0.0
< 2.1.0
< 2.1.1
,
1.0.0-alpha
< 1.0.0
,
1.0.0-alpha
< 1.0.0-alpha.1
< 1.0.0-alpha.beta
< 1.0.0-beta
< 1.0.0-beta.2