Как клонировать все удаленные ветки в Git? - PullRequest
3841 голосов
/ 16 сентября 2008

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

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

Ответы [ 35 ]

44 голосов
/ 26 декабря 2013

Это не так уж сложно, очень простые и понятные шаги:

git fetch origin Это приведет все удаленные филиалы к вашему локальному.

git branch -a Это покажет вам все удаленные ветви.

git checkout --track origin/<branch you want to checkout>

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

git branch

Вывод будет так:

*your current branch 
some branch2
some branch3 

Обратите внимание на знак *, обозначающий текущую ветвь.

44 голосов
/ 27 ноября 2012

Лучше поздно, чем никогда, но вот лучший способ сделать это:

mkdir repo
cd repo
git clone --bare path/to/repo.git .git
git config --unset core.bare
git reset --hard

На данный момент у вас есть полная копия удаленного репо со всеми его ветками (проверьте с помощью git branch). Вы можете использовать --mirror вместо --bare, если в вашем удаленном репо есть свои пульты.

38 голосов
/ 31 мая 2011

Просто сделайте это:

$ git clone git://example.com/myproject
$ cd myproject
$ git checkout branchxyz
Branch branchxyz set up to track remote branch branchxyz from origin.
Switched to a new branch 'branchxyz'
$ git pull
Already up-to-date.
$ git branch
* branchxyz
  master
$ git branch -a
* branchxyz
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/branchxyz
  remotes/origin/branch123

Видите ли, 'git clone git: //example.com/myprojectt' извлекает все, даже ветви, вам просто нужно их оформить, тогда будет создана ваша локальная ветвь.

23 голосов
/ 19 ноября 2014

Вам нужно использовать только "git clone", чтобы получить все ветви.

git clone <your_http_url>

Даже если вы видите только главную ветку, вы можете использовать "git branch -a", чтобы увидеть все ветви.

git branch -a

И вы можете переключиться на любую ветку, которая у вас уже есть.

git checkout <your_branch_name>

Не беспокойтесь, что после «git clone» вам не нужно подключаться к удаленному репо, «git branch -a» и «git checkout» могут быть успешно запущены при закрытии вашего wifi. Итак, доказано, что когда вы делаете «git clone», он уже скопировал все ветви из удаленного репо. После этого вам не нужно удаленное репо, ваш локальный уже имеет коды всех филиалов.

20 голосов
/ 16 сентября 2008

A git clone должен копировать весь репозиторий. Попробуйте клонировать его, а затем запустите git branch -a. Следует перечислить все ветви. Если затем вы хотите переключиться на ветку "foo" вместо "master", используйте git checkout foo.

19 голосов
/ 20 сентября 2008

Используйте мой инструмент git_remote_branch (на вашем компьютере должен быть установлен Ruby). Он создан специально для упрощения удаленных манипуляций с ветвями.

Каждый раз, когда он выполняет операцию от вашего имени, он печатает ее красным на консоли. Со временем они наконец втыкаются в ваш мозг: -)

Если вы не хотите, чтобы grb запускал команды от вашего имени, просто используйте функцию объяснения. Команды будут напечатаны на вашей консоли, а не выполнены для вас.

Наконец, все команды имеют псевдонимы для упрощения запоминания.

Обратите внимание, что это альфа-программа ; -)

Вот подсказка, когда вы запускаете grb help:

git_remote_branch version 0.2.6

  Usage:

  grb create branch_name [origin_server] 

  grb publish branch_name [origin_server] 

  grb rename branch_name [origin_server] 

  grb delete branch_name [origin_server] 

  grb track branch_name [origin_server] 



  Notes:
  - If origin_server is not specified, the name 'origin' is assumed 
    (git's default)
  - The rename functionality renames the current branch

  The explain meta-command: you can also prepend any command with the 
keyword 'explain'. Instead of executing the command, git_remote_branch 
will simply output the list of commands you need to run to accomplish 
that goal.

  Example: 
    grb explain create
    grb explain create my_branch github

  All commands also have aliases:
  create: create, new
  delete: delete, destroy, kill, remove, rm
  publish: publish, remotize
  rename: rename, rn, mv, move
  track: track, follow, grab, fetch
16 голосов
/ 06 декабря 2015

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

Когда вы клонируете репозиторий, вся информация о ветвях фактически загружается, но ветки скрыты. С помощью команды

$ git branch -a

вы можете показать все ветви репозитория, а с помощью команды

$ git checkout -b branchname origin/branchname

затем вы можете «загрузить» их вручную по одному.


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

  1. Первый шаг

создайте новую пустую папку на вашем компьютере и клонируйте зеркальную копию папки .git из репозитория:

$ cd ~/Desktop && mkdir my_repo_folder && cd my_repo_folder
$ git clone --mirror https://github.com/planetoftheweb/responsivebootstrap.git .git

локальный репозиторий внутри папки my_repo_folder по-прежнему пуст, теперь есть только скрытая папка .git, которую вы можете увидеть командой ls -alt из терминала.

  1. Второй шаг

переключите этот репозиторий из пустого (пустого) репозитория в обычный репозиторий, переключив логическое значение "bare" конфигурации git на false:

$ git config --bool core.bare false
  1. Третий шаг

Схватите все, что находится внутри текущей папки, и создайте все ветви на локальном компьютере, поэтому сделайте это обычным репо.

$ git reset --hard

Так что теперь вы можете просто набрать команду "git branch" и увидеть, что все ветви загружены.

Это быстрый способ, которым вы можете клонировать git-репозиторий со всеми ветками одновременно, но это не то, что вы хотите сделать для каждого отдельного проекта таким образом.

12 голосов
/ 22 июля 2017

ОК, когда вы клонируете репо, у вас там есть все ветви ...

Если вы просто сделаете git branch, они как бы скрыты ...

Так что, если вы хотите увидеть название всех ветвей, просто добавьте флаг --all следующим образом:

git branch --all или git branch -a

Если вы просто оформите заказ в филиале, вы получите все, что вам нужно.

Но как быть, если ветка, созданная кем-то другим после того, как вы клонировали?

В этом случае просто выполните:

git fetch

и снова проверьте все ветви ...

Если вы хотите получить и оформить заказ одновременно, вы можете сделать:

git fetch && git checkout your_branch_name

Также создал изображение ниже для вас, чтобы упростить то, что я сказал:

git branch --all to get all branches

12 голосов
/ 20 февраля 2015

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

for branch in  `git branch -r | grep -v 'HEAD\|master'`; do  
 git branch --track ${branch##*/} $branch;
done

Но будьте осторожны, если одна из удаленных ветвей называется, например, admin_master это не будет загружено!

Спасибо Bigfish за оригинальную идею

12 голосов
/ 24 февраля 2017

Клонирование из локального репозитория не будет работать с git clone и git fetch: многие ветви / теги останутся незатронутыми.

Чтобы получить клон со всеми ветками и тегами.

git clone --mirror git://example.com/myproject myproject-local-bare-repo.git

Чтобы получить клон со всеми ветками и тегами, а также с рабочей копией:

git clone --mirror git://example.com/myproject myproject/.git
cd myproject
git config --unset core.bare
git config receive.denyCurrentBranch updateInstead
git checkout master
...