语义版本控制、以前版本的错误修复版本和树结构中的优先级

semantic versioning, bug-fix-releases of previous versions and precedence in tree structure

我们使用 semantic versioning. Suppose we have some software release with a version number of e.g. 2.1.1. Because of an API change the next release has version number 3.0.0. Now let us suppose that a bug is found which occurs both in version 2.1.1 and version 3.0.0. Since some customers still use 2.1.1 and we do not want to force them to upgrade to a version 3.0.1 or later we provide a maintainance (bug fix) release for version 2.1.1. A straight forward version number for this release could be 2.1.2. Though no such example is given in the 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*x2.y2.z2 不可比(但 x1.y1.z1 < x2.y2.z2+m* 仍然成立)。

是否有对树结构进行版本控制的最佳实践?还是我对语义版本控制有误?

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

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