Git标签,为什么这个重复标签在遥控器?

mam*_*amu 21 git

30bd19ef190cf664356c715b56044ce739f07468        refs/tags/Prod_Release_2.3
4ae15ee04c2c41bfc7945e66f4effc746d52baec        refs/tags/Prod_Release_2.3^{}
Run Code Online (Sandbox Code Playgroud)

以上是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.

Chr*_*sen 29

Git中有两种类型的标签:"轻量级"和"注释".

轻量级标签只是在refs/tags/命名空间中引用指向其他对象的引用.他们通过创建git tag <tagname> [object]-a,-m,-F,-s,或-u.

带注释的标签实际上是一种指向其他对象的单独的Git对象(标签对象).标记对象存储提交者信息,作者信息,消息(类似于提交对象),并且它们指向任何单个其他对象(与提交中的提交对象不同,指向一个树对象和零个或多个其他提交对象).

当你有一个带注释的标签时,你通常也会有一个指向它的引用.从技术上讲,这个ref本身就是一个"轻量级"标签,但我们通常不会单独描述它们.

通常,两种标记都指向提交,但它们可以指向任何类型的Git对象(标记,提交,树或blob).该git.git仓库refs/tags/junio-gpg-pub它指向包含维护者的GPG公钥的团块.此外,torvalds/linux-2.6.gitrefs/tags/v2.6.11一个指向树.尽管在技术上允许指向非提交对象的标记,但它们可能会破坏或混淆某些工具,因此应尽可能避免使用它们.


语法^{}后缀(在gitrevisions(7)中描述)是标记解除引用语法(有时称为"剥离标记"语法).对于标签的物体,它计算到第一非标记对象该标签对象点(它会递归顺从标签对象链,直到找到一个非标签对象).对于非标记对象,它与没有^{}后缀的意思相同.

refs/tags/Prod_Release_2.3中央存储库中的ref指向名为的标记对象30bd19ef190cf664356c715b56044ce739f07468.
该标记对象最终指向其他一些名为4ae15ee04c2c41bfc7945e66f4effc746d52baec(可能是提交)的非标记对象.

因此,refs/tags/Prod_Release_2.3^{}解决了4ae15ee04c2c41bfc7945e66f4effc746d52baec.


Dus*_*tin 6

这不是标记,它是指向标记指向的提交的指针.您可以在git show-ref手册页中阅读更多相关信息.