我为什么要关心轻量级和带注释的标签?

Ben*_*ank 332 git git-tag

我去年从Subversion转到Git作为我的日常VCS,我仍在努力把握"Git-think"的细节.

最近困扰我的那个是"轻量级"与注释与签名标签.对于所有实际用途来说,注释标签优于轻量级标签似乎是普遍接受的,但我发现为什么情况的解释似乎总是归结为"因为最佳实践""因为它们是不同的".不幸的是,这些都是非常不满意的论据而不知道为什么它是最佳实践或这些差异如何与我的Git用法相关.

当我第一次切换到Git时,轻薄的标签似乎是自切片面包以来最好的东西; 我可以指出一个提交并说"那是1.0".我很难掌握标签如何比这更好,但我当然不能相信世界的Git专家更喜欢任意注释标签!那么喧哗什么呢?

(奖励积分:为什么我需要签署一个标签?)

编辑

我已经成功地确信注释标签是一件好事 - 知道谁标记,何时重要!作为后续行动,有关良好标签注释的任何建议吗?两者都git tag -am "tagging 1.0" 1.0试图总结提交日志,因为上一个标记感觉就像丢失策略一样.

Cas*_*bel 264

注释标签的最大优点是您知道谁创建了它.就像提交一样,有时很高兴知道是谁做的.如果您是开发人员,并且您发现v1.7.4已被标记(已宣布准备好)并且您不确定,那么您与谁交谈?名称在注释标签中的人!(如果你生活在一个不信任的世界里,这也让人们不会躲过他们不应该做的标记.)如果你是一个消费者,那个名字就是权威的印记:Junio Hamano说这个版本的git就在这里释放.

其他元数据也可能有用 - 有时很高兴知道该版本何时发布,而不仅仅是在最终提交时.有时候这条消息甚至可能有用.也许它有助于解释特定标签的用途.也许候选版本的标记包含一些状态/待办事项列表.

签名标签就像签署其他任何东西一样 - 它为偏执狂提供了更多级别的安全性.我们大多数人都不会使用它,但如果你真的想在将软件放到计算机上之前验证所有内容,你可能会想要它.

编辑:

至于在标签注释中写什么,你是对的 - 说起来并不总是有用.对于版本号标签,它隐含地理解它标记该版本,如果您对其他地方的更改日志感到满意,则无需在那里放置.在这种情况下,它确实是最重要的标记器和日期.我能想到的另一件事就是从测试套件中获得某种批准.看看git.git的标签:他们都只是说"Git 1.7.3 rc1"; 我们真正关心的是Junio Hamano的名字.

但是,对于不那么明显命名的标签,消息可能变得更加重要.我可以设想为单个用户/客户端标记特定的特殊用途版本,一些重要的非版本里程碑,或者(如上所述)具有额外信息的候选版本.这条消息更有用.

  • 啊,哈!听起来我的理解受到了迄今为​​止所有我的Git项目都是单独的事实的阻碍.我从来不需要知道应该责怪谁(它总是我!),所以我没有注意到轻量级标签不跟踪标记器. (9认同)
  • 只是为了与SVN进行比较,因为OP来自该系统:带注释的标签元数据相当于实际的SVN变化,使得标签分支在SVN中具有自己的作者和消息.并且,潜在地,对谁可以制作标签的单独限制,与谁可以检查更改不同 - 如果您只是将系统用于您自己的东西,这种区别是无关紧要的. (4认同)
  • `git help log`现在总结如下:"带注释的标签用于发布,而轻量级标签用于私有或临时对象标签." (4认同)

Kor*_*tor 61

我对该主题的个人观点略有不同:

  • 带注释的标签是那些意图为其他开发人员发布的标签,很可能是新版本(也应该签名).不仅要查看标记的人以及标记的时间,还要查看为什么(通常是更改日志).
  • 轻量级更适合私人使用,这意味着标记特殊提交以便能够再次找到它们.可能是审查它们,检查它们以测试某些东西或其他什么.

  • man git-tag也提到了这一点:"带注释的标签用于发布,而轻量级标签用于私有或临时对象标签.":/sf/answers/2454150401/ (3认同)

Phi*_*ler 27

默认情况下,Git仅将带注释的标签作为命令的基线git describe.将带注释的标签视为对自己和他人具有持久意义的路标,而轻量级标签更像是后来自己找到的书签.因此,带注释的标签值得用作参考,而轻量级标签不应该用作参考.

签署标签是签名者身份的保证.例如,它允许用户验证他们选择的Linux内核代码与Linus Torvalds实际发布的代码相同.签名也可以是签名者在该提交时担保软件的质量和完整性的断言.

  • `git push --follow-tags` 是另一个不同处理的命令:http://stackoverflow.com/a/26438076/895245 (3认同)

小智 9

签名标签是断言发布的真实性的简单方法.

这在DVCS中特别有用,因为任何人都可以克隆存储库并修改历史记录(例如,通过git-filter-branch).如果标记已签名,则签名将无法在git-filter-branch操作中生存,因此如果您的策略是每个版本都由提交者标记并签名,则可以检测存储库中的伪造版本标记.

如果它不是用于签名,我也不会在注释标签中看到太多的意义.


Cir*_*四事件 7

推送带注释的标签,保持轻量级本地

某些Git行为确实以这种推荐有用的方式区分它们,例如:

  • 带注释的标签可以包含与它们指向的提交不同的消息,创建者和日期.因此,您可以使用它们来描述发布而无需进行发布提交.

    轻量级标签没有这些额外信息,也不需要它,因为您只是自己使用它来开发.

  • git push --follow-tags只会推送带注释的标签
  • git describe 没有命令行选项只能看到带注释的标签

man git-tag 说:

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

内部差异

奖金


evi*_*kos 6

我发现了轻量级标签的一个很好的用途 - 在GitHub上回顾展创建一个版本.

我们确实发布了我们的软件并且我们进行了必要的提交,我们只是没有费心去维护GitHub上的"发布"部分.当我们给予一点注意时,我们已经意识到我们也想要添加一些以前的版本,并为它们提供正确的旧发布日期.

如果我们只是在旧提交上创建一个带注释的标记,GitHub将从标记对象中获取发布的日期.相反,当我们为这个旧提交创建一个轻量级标记时,​​该版本开始显示正确的(旧)日期. Source @ GitHub帮助,'关于发布'

似乎也可以为注释提交指定所需的日期,但对我来说看起来并不那么简单:https: //www.kernel.org/pub/software/scm/git/docs/git-tag. HTML#_on_backdating_tags