【问题标题】:semantic versioning, bug-fix-releases of previous versions and precedence in tree structure语义版本控制、先前版本的错误修复发布和树结构中的优先级
【发布时间】:2017-10-28 11:30:53
【问题描述】:

我们使用semantic versioning。假设我们有一些版本号为 e.g. 的软件版本。 2.1.1。由于 API 更改,下一个版本的版本号为 3.0.0。现在让我们假设在版本2.1.1 和版本3.0.0 中都发现了一个错误。由于一些客户仍在使用2.1.1,我们不想强迫他们升级到3.0.1 或更高版本,我们为版本2.1.1 提供维护(错误修复)版本。此版本的直接版本号可能是2.1.2。虽然defintion of precedence 中没有给出这样的例子,但我会得出结论,这些规则暗示2.1.2 3.0.0 - 是什么意思? 2.1.2 版是在 3.0.0 之后发布的,3.0.0 版不包括​​ 2.1.2 的所有错误修复。实际上这两个版本不是真正可订购的,版本(和相应的源修订)现在有一个树结构:

  |
2.1.1        (1)
  |\
  | \
  | 2.1.2    (3)
  |
3.0.0        (2)
  |

为了反映该树形结构并避免混淆,我更喜欢如下版本号方案:

  |
2.1.1        (1)
  |\
  | \
  | 2.1.1+m  (3)
  |
3.0.0        (2)
  |

+m 用于维护版本)。根据语义版本控制中优先级的定义,这仍然意味着2.1.1+m 3.0.0,但对于我们的客户,我们可以添加一个规则,即x1.y1.z1 x2.y2.z2 任何版本x1.y1.z1+m* 都不能与@987654341 相提并论@(但 x1.y1.z1 x2.y2.z2+m* 仍然成立)。

是否有任何用于对树结构进行版本控制的最佳做法?还是我对语义版本控制有什么误解?

【问题讨论】:

    标签: versioning release release-management semantic-versioning


    【解决方案1】:

    不,您不应该假设任何发布日期都按照 semver 优先关系排序,例如 2.1.2 < 3.0.0。您所能确定的是,它们之间可能已经发生了重大变化。

    如果您想要构建日期信息,将其包含在构建元数据中是合理的,但该元数据与 semver 的优先级概念完全无关。然而,人类 可能会合理地得出结论,2.1.2+201706010005 版本可能是在3.0.0+201603151112 之后构建的。

    【讨论】:

    • 所以考虑到优先级2.1.2 < 3.0.0,我可以假设什么?我认为可以合理地假设为2.1.2 完成的所有工作都包含在3.0.0 中。 (另请参阅 en.wikipedia.org/wiki/Software_versioning#Sequence-based_identifiers 右侧的图像)仅在特殊情况下,这将不成立。添加时间戳会朝着这个方向发展,但我更喜欢使这些例外情况更加明确的方案。 (例如,如果一般假设无效,则仅将 +... 添加到版本中)
    • 我的意思是,根据语义版本控制规则(适用于包的公共 API),这不是 semver 合理.
    • 许多发布者选择实施版本控制模式,这意味着与 semver 不同的推理标准。这完全没问题,但是在推理规则适用的上下文中应该没有混淆。例如,npm 包管理器的正确操作要求应用语义版本控制。
    • 好的,所以我并不是唯一一个认为 semver 2.0.0 没有涵盖版本控制的所有方面...
    • 使用其他发行信息(例如发行说明),跨主要版本的 semver 范围可能是有意义的。假设我使用包 x,它在 1.4 版中引入了我需要的功能 good。稍后,由于删除了一些名为bad 的其他功能,2.0 版发布了。我不知道good 是否会出现在假设的版本 3 中,所以我可以说我与x@>=1.4<3.0 兼容
    猜你喜欢
    • 2011-02-27
    • 2018-02-03
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多