2017-02-05 2 views
2

Я могу перечислить ветви на моем удаленном хранилище, как этотКлонирование удаленной ветви - почему git считает, что ее не существует?

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

, который дает мне список филиалов, доступных на пульте дистанционного управления:

e7dcd105d5a03d0dc176f9e29fae020c0419c4fb ГОЛОВА
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

Remove '--'. Это неправильное использование. – 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 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 не соответствует действительности. Это команда, которая успешно colnes кончик только одной ветви

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

(через VonC's answer на вопрос «Как клонировать одну ветвь в мерзавца?»)

Смежные вопросы