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

时间:2019-03-20 13:08:04

标签: git git-checkout git-tag

假定我有一个带有标签1.2.3的工作副本,以及两个分别具有标签origin的远程控制器fork1.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.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不支持它?

1 个答案:

答案 0 :(得分:1)

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

包含的所有与标签一起使用的工具都可以直接与refs/tags/一起使用,因此,即使您决定手动将某个遥控器的标签提取到其他命名空间中(如问题的评论之一所述), 使用会非常不舒服。不过,如果您想检出某些遥控器的标签而没有实际将其用作适当的标签,则可以执行此操作。

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