Git标签,为什么在remotes中使用重复的标签?

Git标签,为什么在remotes中使用重复的标签?,git,Git,上面是git ls remote--tags的输出,它列出了我的集中存储库(bare)中的标记 对于Prod_Release_2.3,我只需要一个标签,我不知道这个Prod_Release_2.3^{}来自哪里 在CentralReport1中,Prod_Release_2.3的id与CentralReport2的Prod_Release_2.3的id相同,反之亦然 在我的本地存储库中只有一个标签Prod\u Release\u 2.3 有什么不对劲吗?还是这是故意的 中央存储库托管在Ubunt

上面是git ls remote--tags的输出,它列出了我的集中存储库(bare)中的标记

对于Prod_Release_2.3,我只需要一个标签,我不知道这个
Prod_Release_2.3^{}
来自哪里

在CentralReport1中,Prod_Release_2.3的id与CentralReport2的Prod_Release_2.3的id相同,反之亦然

在我的本地存储库中只有一个标签
Prod\u Release\u 2.3

有什么不对劲吗?还是这是故意的


中央存储库托管在Ubuntu上,我在我的开发机器中使用msysgit。

这不是标记,而是指向标记指向的提交的指针。您可以在中了解更多信息。

Git中有两种类型的标记:“轻量级”和“带注释”

轻量级标记只是
refs/tags/
命名空间中指向其他对象的引用。它们是使用
git标记[object]
创建的,没有
-a
-m
-F
-s
-u

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

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

通常,这两种标记都指向提交,但它们可以指向任何类型的Git对象(标记、提交、树或blob)。has指向一个包含维护者的GPG公钥的blob。还有,它指向一棵树。虽然技术上允许使用指向非提交对象的标记,但它们可能会破坏或混淆某些工具,因此应尽可能避免使用这些标记


语法
^{}
后缀(如中所述)是标记解除引用语法(有时称为“剥离标记”语法)。对于标记对象,它计算为标记对象指向的第一个非标记对象(它将递归地遵循标记对象链,直到找到非标记对象)。对于非标记对象,它的含义与没有
^{}
后缀的含义相同

中央存储库中的
refs/tags/Prod_Release_2.3
ref指向名为
30bd19ef190cf664356c715b56044ce739f07468的标记对象

该标记对象最终指向另一个名为
4ae15ee04c2c41bfc7945e66f4effc746d52baec的非标记对象(可能是提交)


因此,
refs/tags/Prod_Release_2.3^{}
解析为
4ae15ee04c2c41bfc7945e66f4effc746d52baec

如果您在命令行中输入它。看起来您有一个名称不正确的标记。@adymitruk:
git ls remote--tags origin
在我的git.git存储库中打印标记并指向每个标记的提交(因为它们都是真正的标记对象)。另一个好地方是从git社区手册中学习-标记对象与其他对象一起被描述。简而言之,推送的每个带注释的标记都会创建一个初始标记引用和第二个引用,该引用使用指向第一个标记的^{}语法。轻量级标记只创建一个引用。@bryanbraun:
whatever^{}
名称不作为ref(在
refs/
命名空间下的条目)存在
^{}
只是一个后缀,可以附加到任何修订名(ref name,(缩写)object hash或其他计算修订名等)以“剥离”标记对象,直到找到非标记对象。假设要标记的提交C已经被推送,那么推送一个新的带注释的标记将推送一个标记对象(指向C)和一个新的引用(指向新的标记对象),而轻量级标记将只推送新的引用(指向C)。尽管
ls remote
显示了这些
^{}
psuedo引用,它们实际上并不作为参照物存在;您可以通过(例如)比较
git show ref--tags
(实际标记参考)的输出与
git ls remote--tags的输出来验证这一点。
(“有线协议”报告的内容)。由于技术原因,“剥皮标签”包含在“导线协议”中,但它们不作为实际参考存在。但是是的,你可以把
^{}
看作是“引用”(因为它是一种命名特定对象的方式),只要你不使用这个术语来表示“在
/refs
命名空间下的条目”。你能有两个相同名称和描述的标记指向同一个提交吗?
30bd19ef190cf664356c715b56044ce739f07468        refs/tags/Prod_Release_2.3
4ae15ee04c2c41bfc7945e66f4effc746d52baec        refs/tags/Prod_Release_2.3^{}