261

我见过很多项目使用v1.2.3git 中的标签命名约定。我也看到了一些使用1.2.3。是否有官方认可的风格,或者有什么好的论据可以使用吗?

4

8 回答 8

183

Semantic Versioning的1.0.0版本,由 GitHub 成名的 Tom Preston-Werner 编写,有一个子规范来解决这个问题:

标记规范(SemVerTag)

如果您使用版本控制系统(Git、Mercurial、SVN 等)来存储您的代码,则应该使用此子规范。使用该系统允许自动化工具检查您的包并确定 SemVer 合规性和发布版本。

  1. 在版本控制系统中标记发布时,版本的标记必须是“vX.YZ”,例如“v3.1.0”

然而,经过讨论,这已被删除,并且不再出现在SemVer 规范的最新版本(撰写本文时为 2.0.0)中。 后来在同一个地方的讨论线程更深入,并产生了一个新的“v1.2.3”是语义版本吗?添加到 SemVermaster分支的常见问题解答中,尽管在撰写本文时(超过 2 年),正式发布的规范中仍未出现此更改。

于 2010-01-06T06:50:22.680 回答
117

似乎有两个主要的约定(假设您也遵守一些合理的标准来对版本本身进行编号):

  • v1.2.3
  • 1.2.3

其优点v1.2.3是 Git 文档(以及 Mercurial 文档)在其示例中使用该格式,并且Linux 内核Git本身等几个“权威”使用它。(提到的语义版本控制曾经使用它,但现在不再使用了。)

的优点1.2.3是 gitweb 或 GitHub 可以自动提供表单的 tarball 或 zip 下载(我认为应该命名packagename-$tag.tar.gztarball 已经很确定了)。或者,您可以直接使用来生成 tarball 版本号。对于没有正式发布流程的轻量级项目,这些可能性会非常方便。还应注意,语义版本控制绝不是唯一的或普遍接受的版本编号标准。GNOME 等著名项目以及无数其他项目都使用标签命名。package-v1.2.3.tar.gzgit describe1.2.3

我认为巩固这些立场可能为时已晚。与往常一样,保持一致并有意义。


更新:正如评论中提到的 GitHub 现在提供了一个 tarball 名称,其中去掉了标签上的“v”。

于 2011-04-26T21:51:57.257 回答
84

前面的“v”的原因是历史性的。较旧的 SCCS (cvs,rcs) 无法区分标签标识符和修订号。标签标识符被限制为不以数值开头,以便可以检测到修订号。

于 2011-06-08T00:46:18.653 回答
21

从来没听说过。
但是Git不允许标签和同名的分支同时存在,所以如果你有一个分支“ 1.1”代表1.1作品,不要放标签“ 1.1”,例如使用“ v1.1

于 2010-01-05T13:28:46.170 回答
11

新的包管理器建议标记不带前缀的版本v(如PHP 项目的作曲家)。 SemVer 2.0没有任何关于标签规范的内容。由于避免冲突,它是故意完成的。但是,建议v在文档和文本参考中添加前缀。作为示例格式v1.0.4而不是完整的version 1.0.4ver. 1.0.4在文档中足够冗长和优雅。

于 2014-02-02T07:25:28.433 回答
9

我们将分支和标签分别用于特定于发布的工作,然后是实际发布:

o---o-----o---o---o--- ...   master
     \   /       /
      \ /       /
       o-------o--- ...      1.6 branch

每个开发人员都会对他们即将提交的工作是否仅适用于 master 或它是否也与分支相关做出心理决定。您可以看到对分支所做的更改被合并回 master 上,但 master 上的某些更改永远不会在分支上进行(即,在本示例中,那些不打算用于 1.6 版本的更改)。

当我们准备好发布时,我们标记它,然后最后一次合并一个,我们将标记命名为与分支相同的名称,但带有一个关于它是什么特定版本的额外标识符,例如“1.6-release”或“1.6-beta”或“1.6-rc2”等。

... ------o---o---o--o---o--- ...   master
         /       /
        /       /
... ---o------(*)--- ...      1.6 branch
          1.6-release
于 2010-01-05T13:51:20.967 回答
9

我不知道有什么标准。我只需选择我的标签名称,以便我可以粘贴

VERSION = `git describe --tags`

在我的构建脚本中。因此,标签命名约定实际上取决于项目的版本命名约定。

于 2010-01-05T14:01:24.977 回答
1

我知道没有一种最佳实践。以下是一些链接:

通常,版本控制 ( 0.0.1, v0.2.1, ...) 可能与一些问题跟踪密切相关,这可能被认为是一种合理的方法。(.. 虽然我通常使用v-prefixed 标签名称.. 另请参阅@VonC 答案)

于 2010-01-05T13:33:42.227 回答