0.0.1是否是一个有效的语义化版本号?

25

一位同事就一个模块的第一个版本产生了一个随意的争论。我们想知道 0.0.1 是否应该是初始发布版本。我认为 0.1.0 是适当的第一个版本,因为 0.0.1 暗示着一个补丁的增量,而一个补丁意味着先前已发布过。所以根据我的理解,必须有一个 0.0.0。

我浏览了 http://semver.org 的文档,它们确实说 0.1.0 通常为初始发布版本,但我没有看到任何规则禁止在主版本号为 0 时将次要版本号设置为 0。

有人知道 0.1.0 是否为最低可能版本的正式规定,还是只是一种约定吗?


5
@MarcB:他在询问是否有正式规定。如果文档说明0.0.1是(或不是)有效的初始版本号,那么这将是一个明确的答案,不涉及任何意见。如果没有这样的规则,则也可以作为答案。 - Keith Thompson
4个回答

30

根据semver 2.0.0规范,它并不排除此类情况。但是FAQ建议从0.1.0版本开始。

我在0.y.z开发阶段应该如何处理修订版本?

最简单的方法是从0.1.0版本开始你的初始开发版本,然后为每个后续版本递增次要版本。


5
为什么建议从0.1.0开始而不是0.0.0? - Jimbali
11
也许版本号0.0.0应该是空仓库。 - Alicia Garcia-Raboso

8
这里没有规则,惯例宽松。当初始主版本号为零时,保证的仅是较高的数字在较低的数字之后出现。所有关于“这是一个错误修正”或“旧功能仍然有效”的语义化版本控制保证只适用于版本一或更高版本。虽然0.1.0是最低版本号的通行做法,但有些人会争辩它是与其他人共享的第一个版本一。语义化版本控制的规范仅看到前导零并洗手不管。

3

1
"^0.0.1" 只匹配精确版本,但是 "~0.0.1" 与 "0.0.x" 匹配... - greuze
要查看参考的语义化版本计算器的行为,您可以使用npmjs上的“test”软件包 - 它具有“0.0.x”版本。 - Radagast the Brown

3
语义化版本控制(SemVer)是关于“安全地推动您的项目向前发展”的。 ——文档介绍第二段的最后一行。
根据这个定义和目的,我们应该为每个发布版本提升版本号(提高版本号然后提交)。
从文档规则#2中得知:版本号(MAJOR,MINOR和PATCH)是非负整数。
如果您从0.0.0开始,必须提升到类似0.0.1或0.1.0的版本号,其中MAJOR的“0”表示您仍在开发中。您也可以直接提升到1.0.0,其中MAJOR的“1”表示首次公开发布。
请记住规则,如果您提升了MAJOR,则必须将MINOR和PATCH重置为“0”...如果您提升了MINOR,则必须将PATCH重置为“0”。这将防止您同时提升所有三个版本号。
要发布0.0.0版本,您必须在package.json中从0.-1.-1或0.0.-1开始(根据规则#2,不能这样做),以便在发布(提高版本号然后提交)时您有一个带有semver编号0.-1.0(根据规则#2,不能这样做)或0.0.0的版本。
语义化版本控制的FAQ中说:“最简单的方法是从0.1.0开始您的初始开发版本,然后为每个随后的发布递增次要版本。”他们在谈论实际发布之后的情况;即您完成了(提高版本号然后提交)。这是因为您可能会有一个编号为0.0.1的发布版本,表示您修复了一些错误。
0.0.0 = 初始开发版本(不存在)
0.0.1 = 自(0.0.0|您开始的地方)以来修复的错误
0.1.0 = 自(0.0.0|您开始的地方)以来新增的功能

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接