SemVer 中 MINOR vs PATCH 规则的原因

Posted

技术标签:

【中文标题】SemVer 中 MINOR vs PATCH 规则的原因【英文标题】:Reason for MINOR vs PATCH rules in SemVer 【发布时间】:2018-03-25 00:40:38 【问题描述】:

何时使用SemVer 2.0 增加主要版本号与次要版本号的规则非常引人注目。它们显然为了解应用/服务是否向后兼容提供了很多优势。

但是该网站并没有真正说明 MINOR 和它所谓的 PATCH 之间的差异的原因。我认为它没有 MAJOR 和 MINOR 的相同好处。

SemVer 规则供参考:

    当您进行不兼容的 API 更改时的主要版本, 以向后兼容的方式添加功能时的次要版本,并且 当您进行向后兼容的错误修复时的 PATCH 版本。

所以 MINOR 和 PATCH 之间的唯一区别是功能与错误修复。我的公司想以不同的方式做到这一点。

他们希望 MINOR 成为 [向后兼容] 功能的集合。 “补丁”(我们称之为增量)是发布这些功能所需的版本。 (我们会在发布功能时发布错误修复。)

例如,如果我们计划在 2.4 版本中包含 7 个 [向后兼容] 功能,那么 2.4.0 可能有 2 个功能,2.4.1 将有 3 个功能,而 2.4.2 将有最后 2 个(也许每个版本中都有一个或两个错误修复)。

我可以看到这违反了 SemVer,但我需要知道为什么 SemVer 决定对 MINOR 和 PATCH 版本之间的差异做出规定,这样我才能知道以何种方式推动我的公司。

注意:我希望这对于 Stack Overflow 来说不是太主观。我通常不会问这样的问题,所以这个问题可能需要关闭......

【问题讨论】:

这对softwareengineering.stackexchange.com来说可能是一个更好的问题 @Blorgbeard 在引用其他网站时,指出cross-posting is frowned upon 通常会有所帮助 【参考方案1】:

标准刻意简洁。没有什么可以阻止您发布一堆错误修复以及您的新功能,您只需在执行此操作时碰撞次要字段。如果更改仅涉及错误修复、重构或不添加、删除或修改任何接口的文档,那么您只会修改补丁。重点是与您的消费者沟通,了解他们在从您那里获取更新时的风险程度。

编辑: 最佳实践是将错误修复(补丁)与功能工作(次要)和重大更改(主要)分离到单独的版本中。这使您的消费者可以自动获取最新的修复程序,而无需处理功能膨胀或重大更改。

【讨论】:

以上是关于SemVer 中 MINOR vs PATCH 规则的原因的主要内容,如果未能解决你的问题,请参考以下文章

将版本从 MAJOR.MINOR 更改为 MAJOR.MINOR.PATCH

如何从 TFS CI 任务的源代码中获取版本(major.minor.patch)号

Azure DevOps 管道任务 NetCoreCLI 包。 AutoVersion 但保持 Major.Minor.Patch 不变

GitVersion:如何通过提交消息回滚 SemVer 编号更改?

Qt全局宏和变量

ZeroMQ_03 获取版本号