软件版本编号遵循哪些规则?

136

我一直在开发一些软件,想要给它们版本号。

我该如何做呢?

为什么有些软件会有两个版本号,例如1.3v1.1;

而有些软件有三个数字,如4.0.1?

这一切背后的方法是什么?

谢谢。

2个回答

252

我通常看到的方法是 X.Y.Z,它通常对应于 major.minor.patch:

  • Major 版本号在引入一些重大变化时改变。例如,软件包的一个大的或潜在的不兼容性变化。
  • Minor 版本号在引入一个新的小功能或一组较小的功能时改变。
  • Patch 版本号在向客户发布软件的新版本时改变。这通常是用于修复小错误之类的问题。

这种版本控制系统被称为语义化版本控制,其规范可以在 https://semver.org 找到。

其他变体使用构建号作为附加标识符。因此,如果在发布之间测试了许多修订版,则可能会为 X.Y.Z.build 分配一个较大的数字。我使用了一些按年/月或年/发布来标识的软件包。因此,2010 年 9 月发布的版本可能是 2010.9,或者是今年的第三个发布版本 2010.3。

有很多版本控制的变体。最终都归结于个人偏好。

对于 "1.3v1.1",这可能是两个不同的内部产品,也可能是共享库/代码库,与主要产品的版本不同;这可能表示主要产品的版本为 1.3,内部库/包的版本为 1.1。


4
“向后不兼容的变更” 我正在编写一个计算器,肯定不会有向后不兼容的变更吧? - TheTechRobo the Nerd

66

2
SemVer 应该成为一个建议标准,并以 RFC 格式重新发布。 - alecov
3
如果您的代码没有提供公共API,该怎么办,请参见:http://programmers.stackexchange.com/questions/255190/how-does-semantic-versioning-apply-to-programs-without-api - cyclingLinguist
3
只有在软件库的上下文中才有用。 - user6039980
这是最好的。对于那些不知道谁写了这篇文章的人来说,它是由Gravatars的发明者和GitHub的联合创始人Tom Preston-Werner创建的。 - Dexter
"向后不兼容的更改" 我正在制作一个计算器,而不是具有向后不兼容更改的API或其他东西。 - TheTechRobo the Nerd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接