SemVer 和 0.x.y 在 GitHub 上发布

SemVer and 0.x.y Releases on GitHub

如果版本 1.0.0 是每个 SemVer2 的第一个 public API 版本,为什么某些 GitHub 存储库有 0.x.y 版本? 0.x.y 开发不是在您要发布到 public 的第一个完整工作代码之前进行的吗(也就是说,1.0 之前的任何东西都不能使用)?我特别指的是想要声称他们遵循语义版本控制的回购协议。

想法:0.x.y 阶段的发布是否可用代码,只是还没有 API 文档?是这个意思吗?

例如Tensorflow 从 0.5.0 开始在 GitHub 上发布。这是每个语义版本控制可接受的,还是他们根本不遵循 semver 而使用其他东西?

来自规范:

4. Major version zero (0.y.z) is for initial development. Anything MAY change at any time. The public API SHOULD NOT be considered stable.

Why do some GitHub repos have 0.x.y releases if version 1.0.0 is the first public API release per SemVer2?

因为维护者不希望给人的印象是他们的 code/API 已经稳定或可以投入生产。他们保留以任何他们认为适当的理由删除或修改任何 API 的权利,恕不另行通知。

THOUGHT: Is a release in the 0.x.y phase usable code that just doesn't have API documentation yet? Is that what that means?

它的意思正是规范所说的意思。如果这还不够清楚,那么您必须询问每个回购协议的维护者,他们认为这是什么意思。通常,您应该始终将预发布版本视为危险的、不可靠的并且如有更改,恕不另行通知。在部署前未经全面测试,请勿将任何预发布版本部署到生产环境中。

e.g. Tensorflow has releases on GitHub starting at 0.5.0. Is this acceptable per semantic versioning, or are they simply not following semver and using something else?

你应该问他们是否在关注 SemVer。任何随机版本三元组都可能具有 SemVer 字符串的外观,但这并不意味着发布者遵守 SemVer。如果他们说他们是 SemVer 而第一个 publicly 可用的版本是 0.5.0,那是完全可以接受的。对于第一个功能的预发布,通常的做法是从 0.1.0 开始,但没有规则要求它。也没有要求将较旧的、可能不太稳定的版本保留在 public 视图中。也不需要版本历史的连续性。任何随机版本都可以出于发布者认为足以删除它们的任何原因而从 public 视图中删除。


当发布者发布他们的第一个主要版本时,他们会说“这是一个我们不会破坏的 API”。 SemVer 规范允许他们通过补丁级别的版本升级修复代码和文档中的错误,并通过次要版本升级添加非破坏性功能。规范没有说明这些颠簸应该有多大。