版本号概述

本文最后更新于:几秒前

现在生活中,我们每天会使用很多款APP,并且这些手机软件会周期性地进行升级改版。这就是提到的新版本,那么我们会发现很多软件都有特定格式的一个版本号,比如微信的6.7.3和7.0.0。那么为什么6.7.3之后就直接是7.0.0了呢?6.7.4不存在吗?为什么现在最新的版本是7.0.20,而不是7.2.0?

本文会详细介绍版本号的一些知识,了解各个号的含义。进而了解软件服务商发布每个版本都做了什么。同时,如果你是一个软件服务商,能够更科学的发布你的版本。

规范

从早期的洪荒年代,软件的版本号没太多的说法。甚至有可能是v1、v2、v3…,后来,很多软件使用年份作为版本,比如:拳皇94、拳皇95、拳皇96、拳皇97…

拳皇发布时间轴.png

总而言之,不管经过了怎样的变革。现在代码开发中常用的是版本规范是:**语义化版本2.0.0。**

概述

可以进入官网查看语义化版本2.0.0的详细说明。如果只想简单了解,可以查看本章节后续内容。

格式:<主版本号>.<次版本号>.<修订号>。规则:

  1. 当有不兼容的API修改后,要修改主版本号
  2. 当增加了新的功能特性(但不影响API),就修改次版本号
  3. 当对某个功能进行修正(针对错误的结果进行向后兼容的修改)后,修改修订号

针对上述三条规则,我们需要遵循以下约束:

  1. 语义化版本的软件、必须定义公共API。
  2. 版本号必须是标准格式,即:<主版本号>.<次版本号>.<修订号>
  3. 软件进行任何修改后,发布时都应该改变其版本号
  4. 主版本号为0的程序为开发初始阶段,一切随时可能变化。这样的公共API是不稳定的。
  5. 从1.0.0版本开始,公共API就稳定了。之后的修改都要依据公共API
  6. 修订号必须在只做了向下兼容的修正时才递增。
  7. 次版本号必须在有向下兼容的新功能出现时递增。当有公共API被标记为弃用状态,也应该递增。如果内部有大量的新功能或者改进也可以递增。当次版本号递增时,修订号必须归零。
  8. 主版本号必须在有任何不兼容的公共API修改时递增。当主版本号递增,次版本号和修订号必须归零。

有时我们会发现,一个软件的版本号不只是X.Y.Z这么简单,比如说 1.0.3-alpha.1也是一个符合规范的版本号。其中alpha.1被称为先行版本号,先行版本号意味着版本并不稳定甚至都无法满足预期。版本号和先行版本号之间使用-链接。先行版本号由ASCII码字母数字组成,也可以用.进行分割。

<主版本号>.<次版本号>.<修订号>[-<先行版本号>]

先行版本号一些修饰的词:
alpha:内部版本
beta:测试版
demo:演示版
enhance:增强版
free:自由版
full version:完整版,即正式版
lts:长期维护版本
release:发行版
rc:即将作为正式版发布
standard:标准版
ultimate:旗舰版
upgrade:升级版

还会有其他东西吗?有的。我们还可以在版本号后面增加版本编译元数据。比如1.0.3-alpha.1+100861.0.3+10086 编译元数据和先行版本号一样,可以由字母数字组成,用.分割和前面部分使用+号连接。

<主版本号>.<次版本号>.<修订号>[-<先行版本号>][+<编译元数据>]

版本号的比较

先看这组不等式

2.0.0 > 1.1.0 > 1.0.0 > 1.0.0-rc.1 > 1.0.0-beta.11 > 1.0.0-beta.2 > 1.0.0-beta > 1.0.0-alpha.beta > 1.0.0-alpha.1 > 1.0.0-alpha

相信前面部分很好理解,大版本号、此版本号、修订号依次比较,数越大代表版本越新。

用-连接的先行版本号呢?首先,如果前面的正式版本号都一致,有先行版本号的版本是比没有先行版本号的版本老的,即:(1.0.0 > 1.0.0-rc.1)。那么两个先行版本号的比较是依次比较字符的ASCII码值,码值越大,版本越新。即:1.0.0-rc.1 > 1.0.0-beta.11 > 1.0.0-beta.2 > 1.0.0-beta

那么编译元数据呢?编译元数据不参与版本号的比较,也就是说:1.0.0+android ===1.0.0+ios

我们可以通过安装这个npm包进行版本号的比较。

版本号意味着什么?

现在的软件开发中存在着大量的依赖,版本号是我们能够安全升级依赖的重要保障(尽管有时也不那么安全),作为一个软件开发者,版本号也可以培养我们这样的意识:在软件开发整个过程中,先设计好公共API,再基于次扩展。这样我们整个思路就比较清晰,能够很有章法地开发程序。

总结

  1. 拥抱标准,我们既是版本号的受益者,也是版本号的维护者。
  2. 经过多次演变,目前比较认可的版本方案是<主版本号>.<次版本号>.<修订号>。但是说不好未来是否还会发生变化。
  3. 软件设计中可以先定义好公共API

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!