После клонирования удаленного репозитория он не показывает никаких удаленных веток с помощью параметра -a. В чем может быть проблема? Как это отладить? В этом фрагменте не показаны две удаленные ветки:
$ git clone --depth 1 git://git.savannah.gnu.org/pythonwebkit.git
$ cd pythonwebkit
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
$ git --version
git version 1.8.3.1
Пробовал ту же команду на другом компьютере, работает хорошо:
$ git clone --depth 1 git://git.savannah.gnu.org/pythonwebkit.git
Receiving objects: 100% (186886/186886), 818.91 MiB | 3.44 MiB/s, done.
$ cd pythonwebkit/
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/debian
remotes/origin/master
remotes/origin/python_codegen
$ git --version
git version 1.7.1
Пробовал также клонировать другое репо, работает хорошо. Хотя я могу попробовать еще раз на этой машине, но лучше было бы знать, что не так.
Любые предложения или подсказки будут более чем приветствоваться.
Изменить: Сводка ответа: Начиная с версии git 1.8.3.2, «--depth» и «--no-single-branch» необходимо использовать вместе, чтобы получить такое же поведение, как и раньше. Это считается исправлением ошибки.
git
branch
shallow-clone
Минхуа
источник
источник
master
это ваш местный филиал.remotes/origin/master
- соответствующая удаленная ветка. В чем именно заключается вопрос?git branch -avv
git clone --depth=1 --no-single-branch
, это то, что мне нужно в большинстве случаев.Ответы:
Поведение правильное, после последней ревизии главная ветка (поскольку это HEAD первичного удаленного) является единственной удаленной веткой в репозитории:
Полный клон предлагает новые (все) ветки:
Мелкие клоны
Из-за поверхностного описания в технической документации, «
git-clone --depth 20 repo
[...] результат [s в] цепочках фиксации длиной не более 20». Таким образом, неглубокий клон должен содержать запрошенную глубину коммитов, начиная с конца ветки.В дополнение к этому в документации
git clone
по--single-branch
опции описывается:Поэтому неглубокий клон ( с на глубине -option) только выбирает только один единственный филиал (в вашей запрошенной глубине).
К сожалению, оба варианта (
--depth
и--single-branch
) были ошибочными в прошлом, и использование мелких клонов влечет за собой нерешенные проблемы (как вы можете прочитать по ссылке, которую я разместил выше), что вызвано данной перезаписью истории. В целом это приводит к несколько сложному поведению в особых случаях.источник
fetch = +refs/heads/*:refs/remotes/origin/*
И запустивgit fetch --depth 1
(без--tags
). Мы также можем добавить определенные теги для извлечения, используя config, напримерfetch = +refs/tags/v2.0.0:refs/tags/v2.0.0
.После выполнения неглубокого клона, чтобы иметь возможность проверять другие ветки удаленно ,
Беги (спасибо @jthill):
После этого сделайте
git fetch -v
в заключение
git checkout the-branch-i-ve-been-looking-for
Шаг 1 также можно выполнить вручную путем редактирования
.git/config
.Например, измените следующую строку с:
на (заменить
master
на*
):источник
git remote set-branches origin '*'
для всех веток, заменив*
для одной ветки.-vvv
значит вgit fetch -vvv
? Я не нашел никакой информации об этом в git-fetch docverbosity
или . Это не из метода.debug
git
fetch
Прочитав ответы и комментарий от @jthill, мне лучше всего сработало использование
set-branches
параметра вgit remote
команде:Это изменяет список ветвей, отслеживаемых указанным удаленным устройством, чтобы мы могли извлекать и извлекать только необходимую ветку.
источник
git remote set-branches --add origin 'remote_branch_name'
новую ветку в дополнение к существующим, а не заменять их в удаленном списке ветвей (или шаблонах ветвей) для извлечения в файле .git / config.'
важнаgit remote set-branches --add origin 'remote_branch_name'