Отслеживайте все удаленные Git-ветки как локальные - PullRequest
154 голосов
/ 18 декабря 2008

Отслеживание одной удаленной ветви как локальной ветви достаточно просто.

$ git checkout --track -b ${branch_name} origin/${branch_name}

Перенос всех локальных веток на удаленный, создание новых удаленных ветвей по мере необходимости также просто.

$ git push --all origin

Я хочу сделать наоборот. Если у меня есть X количество удаленных веток в одном источнике:

$ git branch -r 
branch1
branch2
branch3
.
.
.

Могу ли я создать локальные ветви отслеживания для всех этих удаленных ветвей без необходимости создавать каждую из них вручную? Скажите что-то вроде:

$ git checkout --track -b --all origin

Я гуглил и RTM, но до сих пор дошел до койки.

Ответы [ 14 ]

2 голосов
/ 04 сентября 2014

Чтобы сделать то же самое, что и ответ tjmcewan , но в Windows, вызовите его из пакетного файла :

for /f "delims=" %%r in ('git branch -r ^| grep -v master') do git checkout --track %%r

Или это из командной строки :

for /f "delims=" %r in ('git branch -r ^| grep -v master') do git checkout --track %r
0 голосов
/ 04 сентября 2018

Используя bash, Если вы хотите оформить заказ во всех филиалах:

for remote in `git branch -r`; do git checkout $(echo $remote | cut -d'/' -f 2); done

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

0 голосов
/ 15 октября 2013
for rembranch in `git remote update 2>&1 > /dev/null ; git branch -r|egrep -wv "HEAD|master"`
do 
    git checkout --track -b `echo $rembranch|awk -F\/ '{print $2}'` $rembranch; 
done

Пояснение:

строка 1: в «git branch -r» (за которым следует «git remote update» для обновления информации об изменениях в удаленных) перечислены все удаленные ветви; 'egrep -vw' используется, чтобы выбить записи, имеющие HEAD и master в результате.

строка 3: отслеживание именованной удаленной ветви при локальной проверке. Простой awk используется, чтобы избежать «origin /» как суффикса для локальных веток.

0 голосов
/ 26 июня 2012

В случае, если у вас уже есть несколько проверенных веток, и вы хотите

  • проверить все оставшиеся ветви с пульта
  • убедитесь, что все локальные ветви отслеживают удаленные ветви

вы можете использовать следующий bash- и zsh-совместимый скрипт:

git branch -r | while read b; do if git branch | grep -q " ${b##*/}$"; then git branch --set-upstream ${b##*/} $b; else git branch --track ${b##*/} $b; fi; done
...