为什么我应该使用标签与发布/测试版分支进行版本控制?

问题描述 投票:104回答:5

我已经使用git大约一年了,并希望使用标记来标记不同版本的提交。我已经找到了很多关于用于处理标签的命令的信息,但是我想知道的是,如果我可以创建一个名为1.1.0的新分支而不必使用全新的git命令集?

标记而不是分支必须有很多好的理由,但我想知道这些优点是什么。

git branch git-tag
5个回答
84
投票

标签主要用于将来通过标记提交来引用项目的特定版本。当然,您总是可以使用分支,但如果您经常更改版本,最终会有大量未使用或很少使用的分支。

实际上,标签是没有分支的分支,只是添加了一种方法来引用项目的特定版本以降低复杂性。

编辑:Here是一个很好的方式来使用我用于所有项目的git。


131
投票

标签是不可变的。

虽然你可以创建一个名为“1.0.0”的分支 - 你或者任何拥有提交权限的人也可以简单地推送到那个分支(故意与否)并改变1.0.0的含义。

一旦你创建了一个标签,就不能用标签做到这一点 - 就是这样;标签1.0.0正好意味着并且无法更改*。

这是标签和分支之间的主要实际区别

*您可以删除并重新创建标签,从而更改标签,但肯定不是偶然的。


16
投票

我倾向于使用包含标签和分支的工作流程。标签适用于标记已发布的代码或显着的开发构建。分支有助于跟踪与特定版本相关的所有更改。

以下是关于此类工作流程的优秀文章:http://nvie.com/posts/a-successful-git-branching-model/


12
投票

分支和标记是相同的东西(指向提交的指针,也就是."ref"),除了分支自动移动到下一个提交,而标记在同一个提交中保持forever1。

在进行发布时,您通常希望标记构建该发行版的代码的“快照”,并且希望它在您继续发展代码时保持标记,因此您将使用标记。

如果你尝试使用分支,它可能会无意中转移到另一个提交,从而没有构建版本。


1当然,除非您删除标签。

注意:我意识到这是一个古老的问题,但我觉得分支和标签之间的相似性(以及一个关键的区别)并没有像其本来那样清晰地在其他答案中闪现出来。


6
投票

您可以使用标记来记录历史记录中的重要提交。 “这是我们在构建服务器崩溃的那个下雨的星期四用于此版本的确切提交”。如果您使用分支而不是标记,则永远无法知道您使用的确切提交。你只知道“我们在这个分支上的某个地方发布了1.1.0版本”,除非你手动写下该提交的确切哈希值,这就是你在第一时间使用标签的原因:)

© www.soinside.com 2019 - 2024. All rights reserved.