2017-02-05 65 views
2

我可以列出树枝上我的远程存储库这样克隆远程分支 - 为什么git认为它不存在?

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

这给了我分支的遥控器上提供的列表:

e7dcd105d5a03d0dc176f9e29fae020c0419c4fb HEAD
500fde10ba1498fe5c0118b095fe21521ea4e569裁判/头/任务/ 150 -Xamarin

(NB我把它们中的大部分都剪掉了。)

以下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 
错误

克隆到“软件”,这些收益的变化

每一个命令的版本...
警告:找不到远程分支任务/ 150-Xamarin - 克隆。
致命:远程分支任务/ 150-Xamarin - 在上游原产地

没有发现如果我省略了--我得到一个不同的错误。例如从

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

我得到的错误

您必须指定一个仓库克隆。

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

+1

删除'--'。这是不正确的使用。 – ElpieKay

+0

谢谢ElpieKay。你是对的,尽管这并没有为我解决它。它确实帮助我诊断了我的问题的真正原因,即分支名称以非分裂空格字符结尾,git作为分支名称的一部分读取 – dumbledad

回答

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×69 0x6E为0x20 0x68 0x74 0x74 0x70 0x73

虽然失败看起来像这样

将0x58 0x61 0x6D 0x61 0x72×69的一个0x6E 0xC2 0xA0 0x68 0x74 0x74 0x70 0x73

这就是问题所在。失败命令中的分支名称后面没有正常的空白字符(用UTF8编码为0x20),而是用non-breaking space(用UTF8编码为0xC2 0xA0)。 Git包含了作为分支名称一部分的尾随非分隔空间,因此无法在远程计算机上找到它。

我不知道一个非破坏性空间如何进入我的git命令,但那是我的问题。


为了完整起见,这里是我最初的答案。

git clone文档中参数的顺序是有误导性的。这是一个成功colnes只是一个分支

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

尖端的命令(通过VonC's answer的问题:“如何克隆一个分支混帐?”)

相关问题