Refspec 消除本地和远程标签以及同名分支的歧义?

Refspec to disambiguate local and remote tags as well as branches with same name?

假设我有一个带有标签 1.2.3 的工作副本和两个遥控器 originfork 也分别带有标签 1.2.3,但所有三个实际上都指向不同的承诺。另外,在所有的1.2.3中还有一个分支

是否有允许您引用 fork(或 origin)已知的 1.2.3 标记的完全限定路径(refspec)?

git checkout 1.2.3会切换到本地1.2.3分支,git checkout tags/1.2.3会切换到本地1.2.3标签。但是是否可以通过某种方式检出 fork 的远程标签 1.2.3?我尝试了 git checkout fork/tags/1.2.3git checkout refs/remotes/fork/tags/1.2.3(pathspec 错误)以及 git checkout refs/remotes/fork/1.2.3 之类的东西,但它检查了该名称的分支,而不是标签。

获取标签失败:

git fetch --tags
From https://...
 ! [rejected]          1.2.3      -> 1.2.3  (would clobber existing tag)

这是否暗示 Git 不支持它?

与分支不同,Git 不为每个远程命名空间标签。如果您从任何远程获取标签,它们将存储在 refs/tags/ 命名空间中,类似于本地分支的 refs/heads/。没有等同于远程分支的 refs/remotes/<remote>/ 命名空间。

所有用于处理标签的工具都直接与 refs/tags/ 一起工作,因此即使您决定手动将某些遥控器的标签提取到不同的命名空间中(如对您问题的评论之一所述) ,实际上 使用 他们会相当不舒服。不过,如果您想检查某些遥控器的标签而不实际将它们用作正确的标签,则可以这样做。

这有点假设人们在标记东西时一起工作。如果您无法避免多人创建具有不同内容的相同标签,您可能需要就标签命名方案(例如 foo-1.1.2 和 bar-1.1.2)达成一致,或者根本不使用标签。