Refspec 消除本地和远程标签以及同名分支的歧义?
Refspec to disambiguate local and remote tags as well as branches with same name?
假设我有一个带有标签 1.2.3
的工作副本和两个遥控器 origin
和 fork
也分别带有标签 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.3
和 git 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)达成一致,或者根本不使用标签。
假设我有一个带有标签 1.2.3
的工作副本和两个遥控器 origin
和 fork
也分别带有标签 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.3
和 git 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)达成一致,或者根本不使用标签。