我已经看到很多项目v1.2.3
用作git中标签的命名约定。我也看到了一些用处1.2.3
。是否有正式认可的风格,或者有使用它们的任何良好论据?
v/
以此名称空间中的标签分组开始。2.理想情况下,标签还应该包含唯一标识应用程序的首字母缩写词。例如v/myapp/1.0
。这使git仓库的合并更加容易:如果应用程序将被合并,则标签不会在标签名称空间中发生冲突。
我已经看到很多项目v1.2.3
用作git中标签的命名约定。我也看到了一些用处1.2.3
。是否有正式认可的风格,或者有使用它们的任何良好论据?
v/
以此名称空间中的标签分组开始。2.理想情况下,标签还应该包含唯一标识应用程序的首字母缩写词。例如v/myapp/1.0
。这使git仓库的合并更加容易:如果应用程序将被合并,则标签不会在标签名称空间中发生冲突。
Answers:
GitHub著名的Tom Preston-Werner 撰写的Semantic Versioning 1.0.0 版本有一个子规范可以解决这个问题:
标记规范(SemVerTag)
如果您使用版本控制系统(Git,Mercurial,SVN等)来存储代码,则应使用此子规范。使用此系统可以使自动化工具检查您的软件包并确定SemVer符合性和发行版本。
- 在版本控制系统中发布标记时,版本的标记必须为“ vX.YZ”,例如“ v3.1.0”。
但是,在讨论之后,此内容已被删除,并且不再存在于最新版本的SemVer规范中(在撰写本文时为2.0.0)。 后来在同一地方进行的讨论更加深入,并产生了新的“ v1.2.3”是否是语义版本?被添加到SemVer master
分支机构的FAQ中,尽管在撰写本文时(超过2年),此更改仍未出现在正式发布的规范中。
v
应该在那里,虽然。
似乎有两个主要的约定(假设您还为发行版本本身遵守一些合理的标准):
v1.2.3
1.2.3
的优点v1.2.3
在于,Git文档(以及Mercurial文档)在其示例中使用该格式,并且多个“权威”(例如Linux内核和Git本身)也使用它。(提到的语义版本控制曾经使用它,但现在不再使用。)
的优点1.2.3
是gitweb或GitHub可以自动提供该格式的tarball或zip下载packagename-$tag.tar.gz
(我认为已经确定不应该将tarball 命名为package-v1.2.3.tar.gz
)。或者,您可以git describe
直接使用生成tarball版本号。对于没有正式发布过程的轻量级项目,这些可能性非常方便。还应该注意的是,语义版本控制绝不是唯一或普遍接受的版本编号标准。诸如GNOME之类的著名项目以及无数其他项目的确使用1.2.3
标签命名。
我认为巩固这些职位可能为时已晚。与往常一样,保持一致和合理。
更新:如本评论中所述,GitHub现在提供了一个tarball名称,其中标记中去除了“ v”。
v
。
前面的“ v”的原因是历史性的。较旧的SCCS(cvs,rcs)无法区分标签标识符和修订号。标记标识符被限制为不能以数字开头,以便可以检测到修订号。
从来没听说过。
但是Git不允许标签和同名分支同时使用,因此如果您有一个分支“ 1.1
”用于1.1
工作,则不要放置标签“ 1.1
”,例如使用“ v1.1
”
新的软件包管理器建议标记没有前缀的版本v
(例如PHP项目的作曲家)。
SemVer 2.0与标签规范无关。避免冲突是有意完成的。但是,建议v
在文档和文本参考中添加前缀。作为示例格式,v1.0.4
而不是完整的文档,version 1.0.4
或者ver. 1.0.4
在文档中不够详细和优雅。
我们分别使用分支和标签进行特定于发行版的工作,然后分别使用实际发行版:
o---o-----o---o---o--- ... master
\ / /
\ / /
o-------o--- ... 1.6 branch
每个开发人员都会明智地决定他们将要提交的工作是仅适用于母版,还是与分支相关。您可以看到,对分支所做的更改已在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
我不知道任何标准。我只需选择我的标签名称即可粘贴
VERSION = `git describe --tags`
在我的构建脚本中。因此,标签命名约定实际上取决于项目的版本命名约定。
我没有一个最佳实践。以下是一些链接:
通常,版本控制(0.0.1
,,v0.2.1
...)可能与某些问题跟踪并驾齐驱,这被认为是一种可行的方法。(..虽然我通常使用v
-prefixed标签名..另请参见@VonC答案)