带注释和不带注释的标签有什么区别?
如果我想标记当前提交。 我知道以下两个命令行工作:
git tag <tagname>
和
git tag -a <tagname> -m '<message>'
这些命令有什么区别?
TL; DR
这些命令之间的区别在于一个给你一个标签消息,而另一个则不给你。 一个带注释的标签有一个可以用git-show(1)显示的消息,而没有注释的标签只是一个指向提交的已命名指针。
更多关于轻量级标签
除非您为签名标签选择-s标志,否则该标签默认为轻量级,无符号标签。 轻量级标签也有一些不同之处:
git tag <tagname>
,Git将在当前版本中创建一个标签,但不会提示你注释。 它将被标记而没有消息。 git tag -a <tagname>
,Git会提示你注释,除非你也使用了-m标志来提供消息。 git tag -a -m <msg> <tagname>
,Git会标记提交并用提供的消息对它进行注释。 git tag -m <msg> <tagname>
,Git的行为就好像你传递了注解的-a标志并使用提供的消息。 基本上,这等于是否要让轻量级代码具有与其关联的注释。
使用差异
man git-tag
说:
带注释的标签用于发布,而轻量级标签则用于私人或临时对象标签。
而某些行为的确可以区分这些建议,例如:
带注释的标签可以包含与它们指向的提交不同的消息,创建者和日期。 因此,您可以使用它们来描述发行版而不必进行发布提交。
轻量级标签没有额外的信息,并且不需要它,因为您只是自己使用它来开发。
git describe
只能看到带注释的标签 内部差异
轻量级和带注释的标签都是包含SHA-1的.git/refs/tags
下的文件
对于轻量级标签,SHA-1直接指向提交:
git tag light
cat .git/refs/tags/light
打印与HEAD的SHA-1相同。
所以难怪他们不能包含任何其他元数据。
带注释的标签指向对象数据库中的标签对象。
$ git tag -as -m msg annot
$ git cat-file -t "$(cat .git/refs/tags/annot)"
tag
$ # Get a textual representation of the tag object.
$ git cat-file -p "$(cat .git/refs/tags/annot)"
object 4284c41353e51a07e4ed4192ad2e9eaada9c059f
type commit
tag annot
tagger Ciro Santilli <your@mail.com> 1411478848 +0200
msg
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
<YOUR PGP SIGNATURE>
-----END PGP SIGNAT
这就是它如何包含额外的元数据。 从输出中可以看到,元数据字段是:
奖金
确定标签是否被注释:
git cat-file -t tag
输出commit
轻量级tag
以进行注释。
仅列出轻量级代码:如何列出所有轻量级代码?
最大的区别在这里完全解释。
基本上, 轻量级标签只是指向特定提交的指针。 没有更多的信息被保存 ; 另一方面,带注释的标签是常规的对象 ,它有一个作者和一个日期,因为他们有自己的SHA密钥,所以可以被引用。
如果知道谁标记了什么以及何时与您相关,那么使用带注释的标签。 如果你只是想在你的开发中标记一个特定的点 ,不管是谁,什么时候做,那么轻量级标签就够了。
通常你会去注释标签,但是这真的取决于项目的Git主控。
链接地址: http://www.djcxy.com/p/4655.html上一篇: What is the difference between an annotated and unannotated tag?
下一篇: git commit and push when work is not finished and I am moving workplace