2016-10-28 2 views
14

Я пытаюсь клонировать весь репозиторий на мою машину с помощью linux. Я использовалGit Hub Clone Все ветви сразу

git clone <url> 

Я тогда пошел в папку, где он был загружен и напечатал

git branch 

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

Я знаю, что для каждой ветви в пульте дистанционного управления можно использовать отдельно

git checkout -b <name of local branch> origin/<name of remote branch> 

, но есть ли способ, кроме этого?

+4

'git branch -a' перечисляет все ветви. См. Также 'git branch --help' –

+0

См. Http://stackoverflow.com/a/10312587/166339 – Asaph

+1

Возможный дубликат [Как клонировать все удаленные ветви в Git?] (Http://stackoverflow.com/questions/ 67699/how-to-clone-all-remote-branch-in-git) –

ответ

18

(1) Внутри мерзавца местного repostitory, создать новый файл ш

touch getAllBranches.sh 
vi getAllBranches.sh 

(2) Вставьте ниже содержание в getAllBranches.sh файла:

for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master `; do 
    git branch --track ${branch#remotes/origin/} $branch 
done 

(3) Получить все ветви:

chmod +x getAllBranches.sh  
sh getAllBranches.sh 

(4) Проверьте результат на локальном хранилище:

git branch 

Например, я использую хранилище: https://github.com/donhuvy/spring-boot

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

enter image description here

+0

Не могу понять, как кто-то мог проголосовать за этот ответ! –

+0

Два комментария: если у вас есть проблемы с восходящим потоком, подумайте, что скрипт должен быть «git branch -a | grep remotes | grep -v HEAD | grep -v master | grep -v upstream» (удалить ветви upstream). Кроме того, почему -track? Разве не было бы более последовательным не использовать этот параметр, т. Е. Выборки и слияния мастеров были бы такими же, как любая ветка? –

+0

Лучший ответ когда-либо! Спасибо! – MewX

9

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

Филиалы, по существу, указывают на фиксации. Когда вы делаете git clone (или git fetch), вы получаете все коммиты из удаленного репозитория и все его ветви.

Однако git branch не показывает удаленные ветви по умолчанию. Вместо этого он показывает вам свои локальные ветви, которые могут иметь или не иметь никакого отношения к ветвям, которые существуют на пульте дистанционного управления. Если вы запустите git branch --all, git сообщит обо всех ветвях, о которых он знает, как локальных, так и удаленных.

Следует отметить, что теги не работают таким образом, и нет никакого различия между локальным и удаленным тегом.

+1

Ваш ответ полезен при понимании, но это не так; ответьте на реальный вопрос о том, как получить все ветви, чтобы вы могли переключаться между ними (для нас начинающих git). Выбранный ответ, похоже, сделает это, но если у вас есть идея лучше, мне бы это понравилось. –

+2

@DavidH Вообще ничего особенного вам не нужно делать; 'git branch -a' покажет удаленные ветви, и если вы проверите имя ветки, которое не существует локально, но на удаленном сервере git автоматически создаст для вас локальную ветку. –

+0

Я сейчас не в хорошем месте, чтобы проверить сейчас. Я полагаю, что если я увижу ветви типа «пульты/происхождение/экспериментальные», я могу просто «git checkout experimental», и он будет делать, как вы говорите выше? –

21

Это не слишком сложно, очень простой и прямой шаги заключаются в следующем:

После клонирования репо запустите $ cd myproject

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

$ git branch -a 
* master 
    remotes/origin/HEAD 
    remotes/origin/master 
    remotes/origin/v1.0-stable 
    remotes/origin/experimental 

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

$ git checkout -b experimental origin/experimental 

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

$ git branch 

Выход будет таким:

*experimental 
master 
some branch2 
some branch3 

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

+1

Это должен быть принятый ответ. – Vicky

7
git clone --bare <repository url goes here> .git 

Затем после репо клона со всеми его ветвями, то сделайте следующее:

git config --bool core.bare false 

git reset --hard 
+2

это работало для меня, но с '--mirror' вместо' --bare'. Удаления можно восстановить, используя: 'для ветви в $ (ветвь git -a | sed 's /^..//'); сделать git checkout $ branch; ветвь git --set-upstream-to = $ branch $ branch; done '(по какой-то причине' $ (git branch -a) 'добавляет файлы в текущий каталог в список, а следовательно, sed) – mechalynx

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