【问题标题】:Rules for incrementing patch number in semversemver中增加补丁号的规则
【发布时间】:2014-02-08 03:09:02
【问题描述】:

根据semver

“进行向后兼容的错误修复时的 PATCH 版本。”

“错误修复定义为修复错误行为的内部更改。”

考虑到这一点,假设我有一个可以调用的变量,比如颜色。由于某种原因,我需要更改颜色值。

v1.0.0
$color: #FFF;

v1.0.1
$color: #F0F0F0;

现在这是一个在 API 中定义为用户可以调用的变量。我没有改变被调用的实际变量,只改变了它返回的值。为此,我必须在 API 元素上更改我的代码,并且必须将此代码合并到生产分支中。但是这样的事情真的需要增加 API 的补丁版本号吗?

【问题讨论】:

  • 您是否只是为了这个变化而制作一个全新的版本?更改应该记录在版本控制系统中,但它真的需要分发和发布吗?如果是这样,你有你的答案
  • @bnjmn 如果这是我几周内唯一需要做的改变怎么办?用户是否应该等待更新?
  • 您正在将白色更改为灰色,并且您的用户不能等待几周的更新,除非出现重大问题?伙计,您真的需要获得一些新用户!这不是一个可以等待的小修复......
  • @PeteR 颜色只是本例中的一个示例。

标签: api versioning semantic-versioning


【解决方案1】:

语义版本控制的重点是管理软件系统的依赖关系。语义版本控制提供了一个有组织的规范来标准化这个过程,以便可靠地跟踪这些系统的状态。正如规范所述,

一旦发布了版本化包,就不得修改该版本的内容。任何修改都必须作为新版本发布。

如果您的更改会影响您的 api 的行为(输入或输出)并需要发布,则该版本应与适当的版本号挂钩。这将使包的用户可以放心地依赖您的包。每个版本都会按预期运行;应该没有歧义。


例如,假设您进行了更改并发布它,但不增加补丁编号。您可能有两个用户认为他们使用相同的代码,但在调用$color api 时得到不同的值,具体取决于他们何时获得v1.0.0

值得注意的是,根据您发布软件包的方式,有不同的方法可以向用户提供此更改。我可以想到两种可能的情况:

  • 如果包源是公开的,则在包的早期开发中,可以将快速更改推送到开发分支,用户可以在其中自行承担更改的风险。
  • 或者,如果包不是开源的,则可以通过在版本中附加标识符来进行预发布(请参阅规范中的第 9 和 10 项)。

这些只是几个选项。根据您的具体情况,可能还有其他。

TL;DR 答案

最重要的是,一旦v1.0.0 发布,v1.0.0 应该始终以相同的方式运行。不管这些变化多么微不足道,它们仍然是变化。这适用于所有版本,X.Y.Z

【讨论】:

  • 次要:如果对 README.md 等 API 文档进行更改,是否也应针对这些类型的更改增加 semver?
  • @aaronmallen 如果这只是您提交到存储库的更改,那么不会。但是,如果您要打包这些更改(无论“打包”对您的项目意味着什么),您必须增加版本号(参见规范中的第 3 项)。
  • @deadly 所以版本号与源代码本身(即 repo)没有直接关系,而只与包有关?
  • @aaronmallen 没错。您只需要在发布时确定版本号。
猜你喜欢
  • 2021-04-29
  • 2022-06-30
  • 2023-02-14
  • 1970-01-01
  • 2015-03-30
  • 2018-03-25
  • 2013-04-02
  • 2016-11-20
  • 1970-01-01
相关资源
最近更新 更多