我见过很多项目在Git中使用v1.2.3
作为标签的命名约定。 我也见过一些人使用1.2.3
。是否有官方认可的样式,或者有没有使用其中任何一个的好理由?
语义化版本控制的1.0.0版本,由GitHub的知名人士Tom Preston-Werner发布,包含一个子规范来解决此问题:
然而,在讨论之后,这个概念被移除了,在SemVer规范的最新版本(编写时为2.0.0)中不再存在。同一地方的后续讨论主题进一步深入探讨,并导致一个新的“v1.2.3是语义化版本吗?”被添加到SemVer的标签规范(SemVerTag)
如果您使用版本控制系统(Git、Mercurial、SVN等)存储代码,则应使用此子规范。使用此系统可以使自动化工具检查您的软件包并确定语义化版本控制的合规性和发布版本。
- 在版本控制系统中标记发布时,版本的标签必须为“vX.Y.Z”,例如“v3.1.0”。
master
分支的FAQ中,但截至撰写此文(两年多以后),此更改仍未在正式发布的规范中出现。v
。 - troelskn假设您也遵守一些合理的标准来对发布进行编号,似乎有两种主导的约定:
v1.2.3
1.2.3
v1.2.3
的优点在于Git文档(以及Mercurial文档)在其示例中使用该格式,并且一些“权威机构”如Linux kernel和Git本身也使用它。(提到的Semantic Versioning曾经使用过,但现在不再使用。)
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现在提供了一个没有标签中的“v”的tarball名称。
之前提到的“v”是有历史原因的。早期版本的SCCS(cvs、rcs)不能区分标签标识符和修订号。为了能够检测修订号,标签标识符被限制为不能以数字开头。
我不知道有没有这个功能。
但是Git不允许同时存在同名的标签和分支,所以如果你有一个名为"1.1
"的分支用于1.1
的工作,请不要创建一个名为"1.1
"的标签,可以使用"v1.1
"代替。
VERSION = `git describe --tags`
在我的构建脚本中,因此标签命名约定实际上取决于项目的版本命名约定。
v
(比如PHP项目中的composer)。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),但是一些在主分支(master)上的更改永远不会进入分支(例如,在这个例子中没有意图应用于1.6版本的更改)。... ------o---o---o--o---o--- ... master
/ /
/ /
... ---o------(*)--- ... 1.6 branch
1.6-release
我不知道有什么最佳实践。这里是一些链接:
一般来说,版本控制(0.0.1,v0.2.1等)可能与问题跟踪相结合被认为是一个可行的方法。(尽管我通常使用以v开头的标签名称,参见@VonC的回答)
v/
开头,这样可以将标签分组到一个命名空间中。v/myapp/1.0
。这使得git仓库合并更容易:如果应用程序被合并,标签在标签命名空间中不会发生冲突。 - axd