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

问题描述

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

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

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

解决方法

来自规范:

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 规范允许他们使用补丁级别的版本颠簸修复代码和文档中的错误,并通过次要级别的版本颠簸添加非破坏性功能。规范没有说明这些颠簸应该有多大。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...