语义版本控制 (Semver) - 如何对向后兼容的大型功能更新进行 semver

Posted

技术标签:

【中文标题】语义版本控制 (Semver) - 如何对向后兼容的大型功能更新进行 semver【英文标题】:Semantic Versioning (Semver) - How to semver large functional updates that are backwards compatible 【发布时间】:2019-09-03 16:00:25 【问题描述】:

我的理解是,使用 X.Y.Z,我们只更改 X 以进行重大更改。 Y 用于向后兼容的功能更改。

所以我是否正确地假设即使我的更新是对功能的绝对巨大的补充——没有重大变化,因为它只是一个补充,我仍然不会改变 X。

TLDR无论更新多么“重大”,如果不是重大更改,您都不会更改 X.Y.Z 的 X

【问题讨论】:

所有主要更新,包括添加 NEW API 都应该改变 X。它并没有说它必须改变 X,但是你期望如果 node.js 添加新的 API 它会改变它的版本号,而不仅仅是点号.重大更改必须更改 X,但这并不意味着您不能出于任何其他原因更改 X(即使是庆祝生日这样的微不足道的原因) 【参考方案1】:

您可以为向后兼容的大型功能更新增加主要版本号。我认为你通常应该这样做。

Semver 2.0.0 的第 8 段指出:

如果将任何向后不兼容的更改引入公共 API,则必须增加主版本 X (X.y.z | X > 0)。 可能包括次要和补丁级别更改。当主要版本增加时,补丁和次要版本必须重置为 0。 (已添加重点。)

严格应用 RFC 2119 术语 MAY、MUST 和 MUST NOT 以引用方式并入 Semver,强调的声明意味着当更改仅包括次要版本时,允许但不要求增加主要版本号和补丁级别的变化。

这就是大量非破坏性更改的含义:大量次要和补丁级别的更改。

在规范的这一段中明显没有任何声明等同于:

不得仅包括次要和补丁级别的更改 它必须包含向后不兼容的更改

根据第 7 段,另一种允许的替代方法是仅在您的场景中增加次要版本。

这很好。在您描述的公共 API 在技术上没有以向后不兼容的方式更改但更改足够大以至于 感觉 像对 (可能是人类)用户和/或开发人员。

它还允许有时业务/营销驱动的需要根据重要的功能更改而不是 API 规范本身来增加主要版本号。

【讨论】:

以上是关于语义版本控制 (Semver) - 如何对向后兼容的大型功能更新进行 semver的主要内容,如果未能解决你的问题,请参考以下文章

semver 2.0.0 的重大变化是啥

jQuery 对向后兼容性的支持如何?

更新依赖项是不是会破坏向后兼容性(semver 主要版本更改)?

语义版本控制 - 向后兼容性和版本 0.x.y

版本号严格遵守semver语义化标准

发布后版本控制和 SemVer 2.0(语义版本控制)