Більшість відповідей тут над ускладненням розбору результатів git branch -r
. Ви можете використовувати наступний for
цикл, щоб створити гілки відстеження проти всіх гілок на віддаленому пристрої.
Приклад
Скажіть, у мене є ці віддалені гілки.
$ git branch -r
origin/HEAD -> origin/master
origin/development
origin/integration
origin/master
origin/production
origin/staging
Підтвердьте, що ми не відстежуємо нічого іншого, крім головного вже локально:
$ git branch -l # or using just git branch
* master
Ви можете використовувати цей один вкладиш для створення гілок відстеження:
$ for i in $(git branch -r | grep -vE "HEAD|master"); do
git branch --track ${i#*/} $i; done
Branch development set up to track remote branch development from origin.
Branch integration set up to track remote branch integration from origin.
Branch production set up to track remote branch production from origin.
Branch staging set up to track remote branch staging from origin.
Тепер підтвердьте:
$ git branch
development
integration
* master
production
staging
Щоб видалити їх:
$ git br -D production development integration staging
Deleted branch production (was xxxxx).
Deleted branch development (was xxxxx).
Deleted branch integration (was xxxxx).
Deleted branch staging (was xxxxx).
Якщо ви користуєтесь -vv
перемикачем, git branch
ви можете підтвердити:
$ git br -vv
development xxxxx [origin/development] commit log msg ....
integration xxxxx [origin/integration] commit log msg ....
* master xxxxx [origin/master] commit log msg ....
production xxxxx [origin/production] commit log msg ....
staging xxxxx [origin/staging] commit log msg ....
Розбивка для циклу
Цикл в основному викликає команду git branch -r
, фільтруючи будь-яку HEAD або головну гілки у висновку, використовуючи grep -vE "HEAD|master"
. Для отримання назв лише гілок мінус origin/
підрядку ми використовуємо маніпуляцію з рядком Баша ${var#stringtoremove}
. Це видалить рядок "stringtoremove" зі змінної $var
. У нашому випадку ми видаляємо рядок origin/
зі змінної $i
.
ПРИМІТКА. Ви також можете використовувати git checkout --track ...
це для цього:
$ for i in $(git branch -r | grep -vE "HEAD|master" | sed 's/^[ ]\+//'); do
git checkout --track $i; done
Але я особливо не дбаю про цей метод, оскільки він переключає вас серед гілок, коли він виконує замовлення. Після закінчення він залишить вас на останній гілці, яку він створив.
Список літератури
git checkout --track origin/branchname