在什么情况下应该在git标签命令中添加“-a”标志?

32

我了解这两种命令之间的技术差异(不使用 -a 标志的用法会创建一个轻量级标签,实质上是一个永远不移动的分支,而使用 -a 创建的则在 Git 的对象数据库中创建一个完整的对象,其中包括提交者的姓名、电子邮件等)。

问题是:我应该在我的项目中使用哪个命令(例如,在 Github 上指示发布版本)?如果一个明显比另一个更受欢迎,那么为什么还存在另一个选项?每个版本有哪些用例?


可能是为什么我应该关心轻量级标签和注释标签?的重复问题。 - Ciro Santilli OurBigBook.com
6个回答

14

我认为在发布工作时,你应该始终使用带有注释的标签。那些额外的信息永远不会对你造成伤害。

轻量级标签让我觉得更多是因为懒惰。也许是一个临时的标签(只要确保不要意外推送;实际上你可以使用分支),或者可能是个人仓库,没有太多需要额外信息的用途。我的猜测是,很多较小的项目也这么做;他们真的不关心这些信息。可能只有一个集成人员,没有人关心验证签名标签,他们只是简单的版本发布标记。(我仍然认为你应该优先使用带注释的标签,以防万一!)

另一种思考方式:轻量级标签有点像写一个非常糟糕的提交消息。你真的不应该这样做,但有时候人们会这样做,通常是在没有人看的时候。


9

每个版本的使用情况是什么?

man git-tag 说:

带注释的标签用于发布,而轻量级标签用于私有或临时对象标签。

某些行为确实以不同的方式区分它们,因此这个建议是有用的,例如:

  • 带注释的标签可以包含与指向的提交不同的消息、创建者和日期。因此,您可以使用它们来描述一个发布,而不必进行发布提交。轻量级标签没有这些额外信息。
  • git push --follow-tags 只会推送带注释的标签
  • git describe 没有命令行选项只看到带注释的标签

另请参阅:


5

如果您想要推送或拉取它们,那么您应该使用带注释的标签。


4

最常见的风格是使用带注释的标签来表示永久标签,这些标签是你期望推送并且期望其他人查看的。轻量级标签则用于临时标签,这些标签不会被推送,也不希望其他人看到。


4

我几年前曾有一个关于这个问题的观点,我认为现在仍然具有参考价值。 这是我的观点链接


这实际上是一个仅包含链接的回答。 - Guildenstern

0

有几个考虑因素:

  1. 你需要什么功能?
  2. 你需要 git(1) 将其视为“一流”标签吗?

功能

注释标签允许您创建消息并对其进行签名。它还提供了关于标记者的元数据。您需要这个吗?

有时我只想暂时标记提交,比如“大规模回归”或“大规模重写”之前。我不需要任何标记消息,实际上被提示会分散注意力。

但是对于发布标签,您可能需要编写标记消息。也许还要签名。

一流标签

使用轻量级标签,您始终需要检查 Git 手册是否真正意味着“标签”,即“任何标签”,还是特定地指“注释标签”,即我所说的“一流”标签。

在我的工作中,我们并不真的关心我们的发布标签是轻量级的还是注释的。直到我们注意到 git-describe(1) 的行为与我们的预期不同,因为我们混合使用了轻量级和注释标签(此命令默认仅查看注释标签)。

所以我们开始使用注释标签。不是因为第一个考虑因素(功能):

  1. v5.6.7 的标签消息可能只是... v5.6.7
  2. 标签的作者并不重要
  3. 我们不签署我们的标签(或任何东西)

但是使用注释标签结果更方便,因为这样我们正在使用“发布标签”,就 git(1) 套件而言。


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