我了解这两种命令之间的技术差异(不使用 -a
标志的用法会创建一个轻量级标签,实质上是一个永远不移动的分支,而使用 -a
创建的则在 Git 的对象数据库中创建一个完整的对象,其中包括提交者的姓名、电子邮件等)。
问题是:我应该在我的项目中使用哪个命令(例如,在 Github 上指示发布版本)?如果一个明显比另一个更受欢迎,那么为什么还存在另一个选项?每个版本有哪些用例?
我认为在发布工作时,你应该始终使用带有注释的标签。那些额外的信息永远不会对你造成伤害。
轻量级标签让我觉得更多是因为懒惰。也许是一个临时的标签(只要确保不要意外推送;实际上你可以使用分支),或者可能是个人仓库,没有太多需要额外信息的用途。我的猜测是,很多较小的项目也这么做;他们真的不关心这些信息。可能只有一个集成人员,没有人关心验证签名标签,他们只是简单的版本发布标记。(我仍然认为你应该优先使用带注释的标签,以防万一!)
另一种思考方式:轻量级标签有点像写一个非常糟糕的提交消息。你真的不应该这样做,但有时候人们会这样做,通常是在没有人看的时候。
每个版本的使用情况是什么?
man git-tag 说:
带注释的标签用于发布,而轻量级标签用于私有或临时对象标签。
某些行为确实以不同的方式区分它们,因此这个建议是有用的,例如:
git describe
没有命令行选项只看到带注释的标签另请参阅:
如果您想要推送或拉取它们,那么您应该使用带注释的标签。
最常见的风格是使用带注释的标签来表示永久标签,这些标签是你期望推送并且期望其他人查看的。轻量级标签则用于临时标签,这些标签不会被推送,也不希望其他人看到。
有几个考虑因素:
注释标签允许您创建消息并对其进行签名。它还提供了关于标记者的元数据。您需要这个吗?
有时我只想暂时标记提交,比如“大规模回归”或“大规模重写”之前。我不需要任何标记消息,实际上被提示会分散注意力。
但是对于发布标签,您可能需要编写标记消息。也许还要签名。
使用轻量级标签,您始终需要检查 Git 手册是否真正意味着“标签”,即“任何标签”,还是特定地指“注释标签”,即我所说的“一流”标签。
在我的工作中,我们并不真的关心我们的发布标签是轻量级的还是注释的。直到我们注意到 git-describe(1) 的行为与我们的预期不同,因为我们混合使用了轻量级和注释标签(此命令默认仅查看注释标签)。
所以我们开始使用注释标签。不是因为第一个考虑因素(功能):
v5.6.7
的标签消息可能只是... v5.6.7
但是使用注释标签结果更方便,因为这样我们正在使用“发布标签”,就 git(1) 套件而言。