[major].[minor].[release].[build]

  • major: Really a marketing decision. Are you ready to call the version 1.0? Does the company consider this
  • minor: Starts from 0 whenevermajoris incremented. +1 for every version that goes public.
  • release: Every time you hit a development milestone and release the product, even internally (e.g. to QA),
  • build: Can be a SVN revision, I find that works best.

常见版本号命名

首先看看某些常见软件的版本号:
• Linux Kernel: 0.0.1,1.0.0,2.6.32,3.0.18…,若用 X.Y.Z 表示,则偶数 Y 表示稳定版本,奇数 Y 表示开发版本
• Windows:windows 98,windows 2000,windows xp,windows 7…,最大的特点是杂乱无章,毫无规律
• SSH Client:0.9.8
• OpenStack:2014.1.3,2015.1.1.dev8

从上可以看出,不同的软件版本号风格各异,随着系统的规模越大,依赖的软件越多,如果这些软件没有遵循一套规范的命名风格,容易造成 Dependency Hell。所以当我们发布版本时,版本号的命名需要遵循某种规则,其中 Semantic Versioning 2.0.0 定义了一套简单的规则及条件来约束版本号的配置和增长。

语义版本-Semantic Version

Semantic Versioning (http://semver.org/) deserves a mentionhere. It is a public specification for a versioning scheme, in the form of [Major].[Minor].[Patch]. The motivation for this scheme is to communicate meaning with the version number.
参考https://semver.org/lang/zh-CN/

版本格式:主版本号.次版本号.修订号-先行版 (X.Y.Z-xxxx)

  • 主版本号:当修订了不兼容API时
  • 次版本号:当新增了向下兼容功能内容
  • 修订号:当对版本进行了问题修正
  • 先行号:先行版本以及编译信息

规则如下:

先行版本号及版本编译信息可以加到“主版本号.次版本号.修订号”的后面,作为延伸
1. 先行版本号(Pre-release)意味该版本不稳定,可能存在兼容性问题,其格式为:X.Y.Z.[a-c][正整数],如 1.0.0.a1,1.0.0.b99,1.0.0.c1000。
注意:版本一经发布,不得修改其内容,任何修改必须在新版本发布!

语义化版本范围

在使用 Node.js 和 Bower 的时候,其中的 package.json 和 bower.json 都会有 dependencies、devDependencies 项,对于此前端开 发的童鞋应该会比较熟悉。这里面是运行时和开发时依赖库,其中依赖库对应的版本号有很多种写法,诸如:”~1.0.2“, “^1.0“, “>=1.0.2“等,其实可以猜测这种写法代表了某种范围,至于具体含义本文给大家做详细解释。

版本范围是一组满足指定范围的比较器,一个比较器是由操作符和版本号组成,下面是最原始的操作符:
• <小于;
• <=小于等于;
• >大于;
• >=大于等于;
• =等于;如果没有指定操作符,则默认为等于。
一个范围可由一个或者多个比较器组成,如果有多个,则由双竖线(||)连接。对于包含多个比较器,只要满足其一即可。比如:
• 范围 >=1.2.7<1.3.0 ,版本号 1.2.7, 1.2.8, 1.2.99 满足条件,而 1.2.6, 1.3.0, 1.1.0 确不满足。
• 范围 1.2.7 || >=1.2.9<2.0.0 ,版本号 1.2.7, 1.2.9, 1.4.6 满足,而 1.2.8 或者 2.0.0不满足。

一些修饰的词

  • Alpha:内测版,内部交流或者专业测试人员测试用;
  • Beta:公测版,专业爱好者大规模测试用,存在一些缺陷,该版本也不适合一般用户安装;
  • Gamma:比较成熟的测试版,与即将发行的正式版相差无几;
  • RC:是 Release Candidate 的缩写,意思是发布倒计时,候选版本,处于Gamma阶段,该版本已经完成全部功能并清除大部分的BUG。到了这个阶段只会除BUG,不会对软件做任何大的更改。从Alpha到Beta再到Gamma是改进的先后关系,但RC1、RC2往往是取舍关系。
  • Stable:稳定版。在开源软件中,都有stable版,这个就是开源软件的稳定发行版。

范围 >1.2.3-alpha.3,版本1.2.3-alpha.7符合条件,而3.4.5-alpha.9却不满足条件。虽然 3.4.5-alpha.9 实际上大于 1.2.3-alpha.3,但是根据 SemVer 的排序规则,这个版本范围只是接受 1.2.3 的测试版,而不接受其他版本的测试版。当然 3.4.5 满足条件,因为它不是测试版,并且大于 1.2.3-alpha.7。
这么做是有两个目的,首先测试版会经常更新并且可能包含不适合公开的重大改动,因此被排除在范围之外;再者,虽然用户明确此次使用有风险的测试版本,然而下一版本的测试版被包含进来仍然是不合适的。