当要引入重大更改但过去已经引入了主要版本时,语义版本控制会说什么?

What semantical versioning says when there are braking changes to introduce but a major version was already introduced in the past?

我创建了一个带有语义版本控制的软件。

[1.0.0]<--[1.0.1]

在某些时候,我需要引入一些重大更改。我决定添加分支 2.0 并维护 1.0。

[1.0.0]<--[1.0.1]<--[2.0.0]<--[2.0.1]

并且开发还在继续。

                   /-[2.0.0]<--[2.0.1]<--[2.0.2]
                   |
[1.0.0]<--[1.0.1]<--[1.0.2]

现在需要引入1.0的新特性,所以决定启动1.1分支

                   /-[2.0.0]<--[2.0.1]<--[2.0.2]
                   |
                   |         /-[1.1.0]<--[1.1.1]<--[1.1.2]
                   |         |
[1.0.0]<--[1.0.1]<--[1.0.2]<--[1.0.3]

现在,...现在我需要在 1.1 版中引入 BC,但 2.0 版已经存在。语义版本控制表示要增加主要版本。但是如果主要版本在过去增加了怎么办? 3.0 版的时间到了? 3.0 和 2.0 有区别吗?

进行重大更改时,您必须增加主要版本。 SemVer spec 中没有任何内容要求增量恰好为 1。如果您遇到必须将一组 BC 应用到维护分支而不是产品线头部的情况,您实际上可能有两个产品请记住,应该简单地创建一个具有自己的版本轨道的新版本。该规范不要求 3.x.x 与 2.x.x 和 1.x.x 相关,但血统不成立是不寻常的。

在产品分支(分支)的情况下,您还可以跟踪每个分支独立于其他分支的版本控制,但您不能发布超过一个 Prod.x.y.z,因此您实际上是在发布两种产品;也许 Prod.B1.x.y.z 和 Prod.B2.x.y.z.