无法使用-b <tagname> </tagname>直接克隆到git标记中

时间:2010-08-09 08:11:41

标签: git

我有点疑惑为什么我无法直接从git clone命令检出标签。我尝试做的是:

git clone -b mytag <url>/foo.git

我得到的错误是:

warning: Remote branch mytag not found in upstream origin, using HEAD instead

标签存在,例如

cd foo && git checkout mytag 

......运作良好。

如果有人可以分享为什么不可能直接克隆到标签,我会很感激。谢谢。

4 个答案:

答案 0 :(得分:4)

也许您真正需要/想要做的就是使用git archive来提取任何git rev-parse可以理解的tarball。您可以使用--remote选项将存档从某个远程源提取到与要传递到克隆的<url>/foo.git值相同的位置。从理论上讲,这将会更快,因为您将抓住的是工作树,而不是整个存储库。

这是一个“适合我”的例子:

% git archive --prefix foo/ --remote <url>/foo.git my-tag | tar -xf -

答案 1 :(得分:0)

你在git checkout mytag后面是detached head吗?

mytag可能不在refs/heads/的“foo.git”命名空间(对于分支HEAD),但仍引用有效的提交。

这可以解释git clone中的警告,而git checkout运行正常。

答案 2 :(得分:0)

-b意味着签出分支而不是标签。这就是为什么说没有找到远程BRANCH; - )

答案 3 :(得分:0)

直接克隆到标签中,意图打败我。

但是您使用的命令实际上用于克隆存储库的分支。因此,您实际上要求从存储库中签出分支名称mytagmytag分支显然不在您的远程存储库中。

我认为没有任何直接方法可以克隆到新标签中。您必须使用git fetch --tags $URL克隆然后应用标记或显式获取远程存储库的标记。

编辑回复:

嗯,从标签部署是一种常见的使用方式。因为代码通常在其处于相当大的状态时被标记。克隆并从远程存储库中获取标记后,您可以签出mytag

git checkout mytag

甚至

git checkout -b mytagbranch mytag

并继续部署。