29

我正在寻找一种表达变化程度的版本编号方案,尤其是兼容性。

例如, Apache APR使用众所周知的版本编号方案

<major>.<minor>.<patch>
example: 4.5.11

Maven 提出了一个类似但更详细的架构:

<major>.<minor>.<patch>-<qualifier>-<build number>
example: 4.5.11-RC1-3732

Maven 版本控制方案在哪里定义?限定符和内部版本号是否有约定?使用 maven 但不遵循 Maven 版本方案可能是个坏主意...

您还知道哪些其他版本编号方案?您更喜欢哪种方案,为什么?

4

5 回答 5

26

我会推荐语义版本控制标准,Maven 版本控制系统似乎也遵循该标准。请检查,

http://semver.org/

简而言之,它是<major>.<minor>.<patch><anything_else>,您可以在其他任何部分添加其他规则,只要您觉得合适。例如。-<qualifier>-<build_number>.

于 2010-01-12T11:37:37.500 回答
24

这是当前的 Maven 版本比较算法,以及对其的讨论。只要版本只增长,并且除了内部版本号之外的所有字段都是手动更新的,你就很好。限定符的工作方式如下:如果一个是另一个的前缀,则越长越旧。否则,它们将按字母顺序进行比较。将它们用于预发布。

支持使用语义版本来表达兼容性;major 用于非向后兼容的更改,minor 用于向后兼容的功能,patch 用于向后兼容的错误修复。记录它,以便您的库用户可以正确表达对您的库的依赖关系。由于前缀的比较方式,您的快照是自动化的,不需要增加这些快照,除非是发布后的第一个快照。

于 2010-01-12T11:27:55.163 回答
6

纯粹为了完整起见,我会提到旧的 Apple 版本号标准。这看起来像主要版本次要版本错误版本阶段非发布版本。Stage 是从集合d(开发)、a(alpha)、b(beta)或fc(最终客户交付——我认为与发布候选版大致相同)中提取的代码。

阶段和非发布版本仅用于缺少适当版本的版本。

因此,某些东西的第一个版本可能是 1.0.0。您可能已经发布了 1.0.1 的错误修复、1.1 的新版本(具有更多功能),以及 2.0 的重写或主要升级。如果您随后想向 2.0.1 工作,您可以从 2.0.1d1、2.0.1d2 开始,然后到 2.0.1d153 或其他任何需要的时间,然后将 2.0.1a1 发送给 QA,在他们批准 2.0.1a37 之后,将 2.0.1b1 发送给一些愿意下注的人,然后在 2.0.1b9 在场上存活一周后,烧掉 2.0.1fc1 并开始获得签收。当 2.0.1fc17 够了,就变成了 2.0.1,欢欣鼓舞。

这种格式已经足够标准化,因此有一个打包的二进制格式,以及库中用于进行比较的辅助例程。

于 2012-04-27T16:09:34.977 回答
4

在阅读了很多文章/QAs/FAQ/书籍后,我开始认为[MAJOR].[MINOR].[REV]是描述项目版本之间兼容性的最有用的版本控制模式(开发人员的版本控制模式,不适用于营销) .

MAJOR更改向后不兼容,需要更改项目名称、文件路径、GUID 等。

MINOR更改是向后兼容的。标记新功能的引入。

REV用于安全/错误修复。向后和向前兼容。

这个版本控制模式受到libtool版本控制语义和文章的启发:

http://www106.pair.com/rhp/parallel.html

注意:我还建议提供构建/日期/自定义/质量作为附加信息(构建号、构建日期、客户名称、发布质量):

国家银行的你好应用程序v2.6.34,2011-05-03测试,构建23545

但是这个信息不是版本信息!

于 2011-10-11T18:24:00.603 回答
1

请注意,版本号方案(如x.y.0vs. x.y)可能会受到外部因素的限制。

考虑一下Git 1.9(2014 年 1 月)的公告

一个候选版本 Git v1.9-rc2 现在可以在通常的地方进行测试。

我听说各种第三方工具不喜欢两位数的版本号(例如“Git 2.0”) ,并在用户安装 v1.9-rc1 时开始左右吐槽。
虽然很想嘲笑他们草率的假设,但我也很实际,不介意调用即将发布的 v1.9.0 版本来帮助他们。

如果我们走那条路(我现在倾向于走那条路),版本控制方案将是:

  • 下一个候选版本将是v1.9.0-rc3,不是v1.9-rc3
  • will的第一个维护版本v1.9.0v1.9.1(和第N个是v1.9.N);和
  • v1.9.0 之后的功能版本将是 v1.10.0 或 v2.0.0,这取决于我们正在查看的功能跳跃有多大。
于 2014-02-04T07:30:33.143 回答