克隆一个远程分支 - 为什么git认为它不存在?

时间:2017-02-05 10:58:29

标签: git

我可以列出我的远程存储库上的分支

git ls-remote https://blah.visualstudio.com/Blah/_git/Software

它为我提供了遥控器上可用分支的列表:

  

e7dcd105d5a03d0dc176f9e29fae020c0419c4fb HEAD
  500fde10ba1498fe5c0118b095fe21521ea4e569 refs / heads / Task / 150-Xamarin

(N.B。我已将其中大部分剪掉了。)

按照git clone的文档,我应该(我认为)能够克隆远程存储库,但只能获取一个分支的提示。以下是我尝试过的命令的版本

git clone --depth 1 --branch Task/150-Xamarin -- https://blah.visualstudio.com/Blah/_git/Software  
git clone --depth 1 --branch heads/Task/150-Xamarin -- https://blah.visualstudio.com/Blah/_git/Software  
git clone --depth 1 --branch refs/heads/Task/150-Xamarin -- https://blah.visualstudio.com/Blah/_git/Software  

这些错误中的每一个都会返回错误

  

克隆到'软件'......
  警告:无法找到远程分支Task / 150-Xamarin - 要克隆   致命的:远程分支任务/ 150-Xamarin - 在上游起源中找不到

如果我省略--,我会收到不同的错误。例如来自

git clone --depth 1 --branch Task/150-Xamarin https://blah.visualstudio.com/Blah/_git/Software

我收到错误

  

您必须指定要克隆的存储库。

我不明白。远程分支由git ls-remote列出为什么我不能在浅层克隆中获取它?

1 个答案:

答案 0 :(得分:1)

我原来的答案有效,但有误导性。 ElpieKay对这个问题的评论让我进一步深入挖掘。我的问题不是git clone的参数排序。实际上这个命令工作正常

git clone --depth 1 --branch Task/150-Xamarin https://blah.visualstudio.com/Blah/_git/Software

这与我的问题中的失败命令完全相同。当我在二进制编辑器中查看它们时,我才发现了差异。这是两个命令中的片段“Xamarin https”。成功的是

  

0x58 0x61 0x6D 0x61 0x72 0x69 0x6E 0x20 0x68 0x74 0x74 0x70 0x73

虽然失败的那个看起来像这样

  

0x58 0x61 0x6D 0x61 0x72 0x69 0x6E 0xC2 0xA0 0x68 0x74 0x74 0x70 0x73

这就是问题所在。失败命令中的分支名称后面没有正常的空白字符(以UTF8编码为0x20),而是由non-breaking space(在UTF8中编码为0xC2 0xA0)。 Git将尾随的不间断空格作为分支名称的一部分,因此无法在遥控器上找到它。

我不知道一个不间断的空间如何成为我的git命令,但那是我的问题。

为了完整起见,这是我原来的答案。

git clone文档中参数的顺序具有误导性。这是成功地仅显示一个分支

的提示的命令
git clone https://blah.visualstudio.com/Blah/_git/Software --depth 1 --branch Task/150-Xamarin

(通过VonC's answer提问“如何在git中克隆单个分支?”)