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

Mat*_*lin 5 javascript npm semantic-versioning

我的理解是,使用 XYZ,我们只更改 X 来进行重大更改。Y 表示向后兼容的功能更改。

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

TLDR无论更新多么“重大”,如果它不是重大更改,您就不会更改 XYZ 的 X

Tre*_*eid 4

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

Semver 2.0.0第 8 段指出:

如果公共 API 中引入了任何向后不兼容的更改,则主版本 X (Xyz | X > 0) 必须递增。它可能包括较小的补丁级别更改。当主要版本增加时,补丁和次要版本必须重置为 0。(强调是添加的。)

严格应用RFC 2119术语“可以”、“必须”和“不得”(在 Semver 中通过引用并入)强调的声明意味着,当更改仅包含次要更改和补丁级别更改时,允许但不要求增加主版本号。

这就是大量的非重大更改:大量的次要更改和补丁级别更改。

规范的这一段中明显缺少任何相当于以下内容的陈述:

  • 它不能仅包含较小的补丁级别更改
  • 它必须包含向后不兼容的更改

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

这很好。它允许在您描述的情况下有一定的自由裁量权,其中公共 API 在技术上没有以向后不兼容的方式进行更改,但更改足够大,以至于对大概是人类)用户和/或开发商。

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