GitHub 上的 SemVer 和 0.x.y 版本

Posted

技术标签:

【中文标题】GitHub 上的 SemVer 和 0.x.y 版本【英文标题】:SemVer and 0.x.y Releases on GitHub 【发布时间】:2021-05-19 22:47:13 【问题描述】:

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

思考:0.x.y 阶段的版本是否可用,但还没有 API 文档?是这个意思吗?

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

【问题讨论】:

一个项目的版本控制很容易不同。我见过人们将他们的代码称为 1.0.0 和 0.0.1。一般 1.0.0 表示稳定,但 pandas 直到最近才 @astrochun 是什么让版本不稳定?相反,我们如何“确定”一个版本是稳定的? @astrochun 我还应该补充一点,你的回答是公平的:那些 repos 可能没有遵循语义版本控制。我将编辑我的问题以具体反映我正在考虑声称遵循 semver 的回购。 不稳定可能有很多原因。它可能有旧的依赖项、未通过常见的单元测试等。请记住,公开发布公告与官方发布公告之间存在差异。作者可能正在开发它,但尚未完全公布。 请记住,在 GitHub 版本上触发是一种部署方式,因此它可能对 CI/CD 方面有所帮助。 【参考方案1】:

来自规范:

4. 主要版本零 (0.y.z) 用于初始开发。任何事情都可能随时改变。公共 API 不应该被认为是稳定的。

如果版本 1.0.0 是每个 SemVer2 的第一个公共 API 版本,为什么一些 GitHub 存储库有 0.x.y 版本?

因为维护者不希望给人的印象是他们的代码/API 是稳定的或已准备好投入生产。他们保留出于他们认为适当的任何原因在不发出警告的情况下删除或修改其任何 API 的权利。

思考:0.x.y 阶段的版本是否可用,但还没有 API 文档?是这个意思吗?

这正是规范所说的意思。如果这还不够清楚,那么您必须询问这些 repo 的每个维护者,他们认为这意味着什么。一般来说,您应该始终将预发布版本视为危险、不可靠且可能随时更改,恕不另行通知。请勿在部署前未经彻底测试将任何预发布版本部署到生产环境中。

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

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


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

【讨论】:

以上是关于GitHub 上的 SemVer 和 0.x.y 版本的主要内容,如果未能解决你的问题,请参考以下文章

semver:匹配预发布后缀 (3.* =/= 3.4.5-1)

验证 package.json 依赖值中的 semver 版本

Semver (Semantic Versioning) 语义化版本号

字符数组和字符串指针的定义

SemVer 和 GitFlow / 如何修补版本

nodejs开发过程中遇到的一些插件记录