Как клонировать все удаленные ветки в Git?

У меня есть ветвь master и a development, которые помещаются в GitHub. Я clone d, pull ed и fetch ed, но я не могу получить ничего, кроме ветки master.

Я уверен, что мне не хватает чего-то очевидного, но я прочитал руководство, и я не получаю никакой радости.

3854
16 сент. '08 в 1:42
источник поделиться
36 ответов
  • 1
  • 2

Этот вариант будет клонировать удаленное репо со всеми локальными веткими без необходимости извлекать каждую ветку по очереди. Не нужно никаких причудливых сценариев.

Создайте папку с тем же именем хранилища, которое вы хотите клонировать и скопируйте, например:

mkdir somerepo
cd somerepo

Теперь выполните эти команды, но с реальным именем пользователя /reponame репо

git clone --bare git@github.com:someuser/somerepo.git .git
git config --bool core.bare false
git reset --hard
git branch

Voiala! у вас есть все ветки там!

3
08 дек. '18 в 18:34
источник

Связанные вопросы


Похожие вопросы

Я собираюсь добавить свои 2 цента здесь, потому что я попытался выяснить, как удалить удаленную ветвь, которую я удалил локально. Происхождение не было моим, и я не хотел переживать хлопоты повторного клонирования всего.

Это сработало для меня:

предполагая, что вам нужно воссоздать ветвь локально:

git checkout -b recreated-branch-name
git branch -a (to list remote branches)
git rebase remotes/remote-origin/recreated-branch-name

Итак, если я разветвлялся от gituser/master до sjp, а затем разветвлял его на sjp/mynewbranch, он выглядел бы так:

$ git checkout -b mynewbranch
$ git branch -a
  master
  remotes/sjp/master
  remotes/sjp/mynewbranch
$ git fetch (habit to always do before)
$ git rebase remotes/sjp/mynewbranch
2
14 июля '13 в 4:30
источник

Здесь ответ, который использует awk. Этого метода должно быть достаточно, если он используется в новом репо.

git branch -r | awk -F/ '{ system("git checkout " $NF) }'

Существующие ветки будут просто извлечены или объявлены как уже в нем. Но вы можете добавить фильтры awk, если хотите. Его также можно изменить, чтобы он git checkout -b <branch> -t <remote>/<branch> явную команду git checkout -b <branch> -t <remote>/<branch>.

Этот ответ следует за идеей Никоса С.


В качестве альтернативы мы можем указать удаленную ветку. Это основано на ответе Murphytalk.

git branch -r | awk '{ system("git checkout -t " $NF) }'

Он генерирует фатальные сообщения об ошибках при конфликтах, но я вижу их безвредными.


Обе команды могут быть псевдонимами.

Используя Никто не отвечает в качестве ссылки, мы можем иметь следующие команды псевдонимов:

git config --global alias.clone-branches '! git branch -r | awk -F/ "{ system(\"git checkout \" \$NF) }"'
git config --global alias.clone-branches '! git branch -r | awk "{ system(\"git checkout -t \" \$NF) }"'

Лично я бы использовал track-all или track-all-branches.

0
20 июня '19 в 17:05
источник

Вот bash script для извлечения всех ветвей и тегов проекта git в виде снимков в отдельные папки.

https://gist.github.com/hfossli/7562257

Возможно, не то, что было задано напрямую, но некоторые люди могут приехать сюда искать это решение.

0
20 нояб. '13 в 15:22
источник

Немного поздно на вечеринку, но я думаю, что это делает трюк:

mkdir YourRepo
cd YourRepo
git init --bare .git                       # create a bare repo
git remote add origin REMOTE_URL           # add a remote
git fetch origin refs/heads/*:refs/heads/* # fetch heads
git fetch origin refs/tags/*:refs/tags/*   # fetch tags
git init                                   # reinit work tree
git checkout master                        # checkout a branch

Если это сделает что-то нежелательное, я бы с удовольствием узнал. Однако пока это работает для меня.

0
12 сент. '12 в 17:01
источник

Если вы используете BitBucket,

Вы можете использовать репозиторий импорта, это импортирует всю историю git (все ветки и коммиты)

-2
18 авг. '18 в 17:08
источник
  • 1
  • 2

Посмотрите другие вопросы по меткам или Задайте вопрос