假定我有一个带有标签1.2.3
的工作副本,以及两个分别具有标签origin
的远程控制器fork
和1.2.3
,但是所有三个实际上都指向不同的提交。另外,所有这些分支中都有一个分支1.2.3
。
是否有一个完全限定的路径(refspec),它允许您引用1.2.3
(或类似的fork
)所知的origin
标记?
git checkout 1.2.3
将切换到本地1.2.3
分支,并将git checkout tags/1.2.3
切换到本地1.2.3
标签。但是可以以某种方式签出1.2.3
的远程标签fork
吗?我尝试了诸如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不支持它?
答案 0 :(得分:1)
与分支不同,Git不在每个遥控器上命名空间标签。如果您从任何远程获取标记,它们将存储在refs/tags/
命名空间中,类似于本地分支机构的refs/heads/
。没有与远程分支机构的refs/remotes/<remote>/
命名空间等效的对象。
包含的所有与标签一起使用的工具都可以直接与refs/tags/
一起使用,因此,即使您决定手动将某个遥控器的标签提取到其他命名空间中(如问题的评论之一所述), 使用会非常不舒服。不过,如果您想检出某些遥控器的标签而没有实际将其用作适当的标签,则可以执行此操作。
这是一种假设,人们在标记事物时会一起工作。如果您无法避免多个人创建具有不同内容的同一标签,则可能需要就标签命名方案(例如foo-1.1.2和bar-1.1.2)达成一致,或者根本不使用标签。