我们使用semantic versioning。假设我们有一些版本号为例如的软件版本。 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*
都与x2.y2.z2
不可比(但x1.y1.z1
< x2.y2.z2+m*
仍然有效。
是否有对树结构进行版本控制的最佳实践?或者我在语义版本控制方面遇到了什么问题?
答案 0 :(得分:1)
不,您不应假设从2.1.2 < 3.0.0
等semver优先级关系中排序任何发布日期。您可以确定的是,它们之间可能存在重大变化。
如果您想要构建日期信息,那么包含在构建元数据中是合理的,但该元数据与semver优先级概念完全无关。但是, human 可能会合理地断定版本2.1.2+201706010005
可能是在3.0.0+201603151112
之后构建的。