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

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

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

+3946
источник поделиться
38 ответов
  • 1
  • 2

По состоянию на начало 2017 года ответ в этом комментарии работает:

git fetch <origin-name> <branch-name> возвращает ветку для вас. Хотя это не вытягивает сразу все ветки, вы можете выполнить эту ветвь в отдельности.

+6
источник

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

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

mkdir somerepo
cd somerepo

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

git clone --bare [email protected]:someuser/somerepo.git .git
git config --bool core.bare false
git reset --hard
git branch

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

+3
источник
другие ответы

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


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

Я собираюсь добавить свои 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
источник

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

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
источник

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

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

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

0
источник

UPDATE:

Принятый ответ git branch -a только показывает удаленные ветки.

Попытка checkout любой из этих веток либо потерпит неудачу, если у вас больше нет подключения к удаленному репозиторию, либо, в лучшем случае, вы будете в состоянии "отсоединенный HEAD".

Название вопроса подразумевает локальную копию каждой удаленной ветки в вашем клоне. Другими словами - мы хотим, чтобы clone содержал ВСЕ ветки, доступные с самого clone без необходимости подключения и загрузки с сервера remote/origin - "автономный клон с всеми удаленными ветки".


TL; DR

Гейб Копли с помощью git pull --all добивается этого.

Другими словами, запустите: git clone http://[email protected] ; git pull --all


Если с помощью clone вы хотите получить рабочую резервную копию с ветвями и журналами, легко запомнить git pull --all, который СДВИГАЕТ все данные о ветвях в ваш clone, готовый к тому, чтобы оформить заказ на ваш локальный репозиторий. С помощью этой команды вам больше не нужен сетевой доступ к исходному серверу remote/origin для извлечения удаленных веток,

Примечание:
remote/origin branches не будет отображать обновления, если у вас больше нет доступа к remote/origin серверу. Их редакции будут отражать только дату и время, когда вы выполнили свои первоначальные команды git clone http://[email protected] ; git pull --all.


Кроме того, git pull --all не будет оформлять заказ или создавать для вас местное отделение. Для этого используйте одну из моих команд ниже или вручную запустите git checkout remote/origin/<branchname> (даже если у вас больше нет доступа к серверу remote/origin). Используйте git branch -a, чтобы показать удаленные ветки, сохраненные в вашем хранилище clone.

--- Конец ОБНОВЛЕНИЯ


ОРИГИНАЛЬНЫЙ ОТВЕТ:

Это должно сработать:

$ for i in $(git branch -a |grep 'remotes' | awk -F/ '{print $3}' \ 
| grep -v 'HEAD ->');do git checkout -b $i --track origin/$i; done

ИЛИ

Если в вашем репо есть вложенные ветки, эта команда примет это во внимание:

for i in $(git branch -a |grep 'remotes' |grep -v 'HEAD ->');do \
basename ${i##\./} | xargs -I {} git checkout -b {} --track origin/{}; done


Приведенные выше команды будут checkout локальной веткой в вашем локальном репозитории, названной так же, как remote/origin/<branchname> и установленной на --track, изменится с удаленной ветки на сервере remote/origin при выполнении команды git pull для ваш локальный репозиторий.

0
источник

allBranches

Скрипт для загрузки всех веток из проекта Git

Установка:

sudo git clone https://github.com/marceloviana/allBranches.git && sudo cp -rfv allBranches/allBranches.sh /usr/bin/allBranches && sudo chmod +x /usr/bin/allBranches && sudo rm -rf allBranches

Ready! Теперь просто вызовите команду (allBranches) и сообщите директории проекта Git, что вы хотите загрузить все ветки

Используйте

Пример 1:

~$ allBranches /var/www/myproject1/

Пример 2:

~$ allBranches /var/www/myproject2/

Пример 3 (если он уже находится в каталоге проекта):

~$ allBranches ./

или

~$ allBranches .

Просмотреть результат:

git branch

Ссылка:

Репозиторий всех веток GitHub:https://github.com/marceloviana/allBranches

-1
источник

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

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

-2
источник
  • 1
  • 2

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