我有点疑惑为什么我无法直接从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
......运作良好。
如果有人可以分享为什么不可能直接克隆到标签,我会很感激。谢谢。
答案 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)
直接克隆到标签中,意图打败我。
但是您使用的命令实际上用于克隆存储库的分支。因此,您实际上要求从存储库中签出分支名称mytag
。 mytag
分支显然不在您的远程存储库中。
我认为没有任何直接方法可以克隆到新标签中。您必须使用git fetch --tags $URL
克隆然后应用标记或显式获取远程存储库的标记。
编辑回复:
嗯,从标签部署是一种常见的使用方式。因为代码通常在其处于相当大的状态时被标记。克隆并从远程存储库中获取标记后,您可以签出mytag
。
git checkout mytag
甚至
git checkout -b mytagbranch mytag
并继续部署。