30bd19ef190cf664356c715b56044ce739f07468 refs/tags/Prod_Release_2.3
4ae15ee04c2c41bfc7945e66f4effc746d52baec refs/tags/Prod_Release_2.3^{}
以上是我的集中存储库(裸)中git ls-remote --tags
个列表标记的输出。
对于Prod_Release_2.3我只期望1个标签,我不知道这个Prod_Release_2.3^{}
来自哪里。
在centralrepo1中,Prod_Release_2.3的id与centralrepo2的Prod_Release_2.3 ^ {}的id相同,反之亦然。
在我的本地存储库中只有一个标记Prod_Release_2.3
。
有什么不对吗?或者这是设计?
中央存储库托管在Ubuntu上,我在我的开发机器中使用msysgit。
答案 0 :(得分:28)
Git中有两种类型的标签:“轻量级”和“注释”。
轻量级标签只是在refs/tags/
命名空间中引用指向其他对象的引用。它们是使用git tag <tagname> [object]
而不是-a
,-m
,-F
,-s
或-u
创建的。
带注释的标签实际上是一种指向其他对象的单独的Git对象(tag object)。标记对象存储提交者信息,作者信息,消息(类似于commit objects),并且它们指向任何单个其他对象(与提交中的提交对象不同,指向一个tree object和零个或更多其他提交对象)。
当你有一个带注释的标签时,你通常也有一个指向它的引用。从技术上讲,这个ref本身就是一个“轻量级”标签,但我们通常不会单独描述它们。
通常,两种标记都指向提交,但它们可以指向任何类型的Git对象(标记,提交,树或blob)。 git.git
repository有refs/tags/junio-gpg-pub
指向包含维护者的GPG公钥的blob。此外,torvalds/linux-2.6.git
有refs/tags/v2.6.11
指向树。尽管在技术上允许指向非提交对象的标记,但它们可能会破坏或混淆某些工具,因此应尽可能避免使用它们。
语法^{}
后缀(在gitrevisions(7)中描述)是标记解除引用语法(有时称为“剥离标记”语法)。对于标记对象,它将计算为标记对象指向的第一个非标记对象(它将递归地引用标记对象链,直到找到非标记对象为止)。对于非标记对象,它与没有^{}
后缀的意思相同。
中央存储库中的refs/tags/Prod_Release_2.3
引用指向名为30bd19ef190cf664356c715b56044ce739f07468
的标记对象
该标记对象最终指向一些名为4ae15ee04c2c41bfc7945e66f4effc746d52baec
的非标记对象(可能是提交)。
因此,refs/tags/Prod_Release_2.3^{}
解析为4ae15ee04c2c41bfc7945e66f4effc746d52baec
。
答案 1 :(得分:6)
这不是标记,它是指向标记指向的提交的指针。您可以在git show-ref man page。
中详细了解相关信息