Отслеживание одной удаленной ветви как локальной ветви достаточно просто.
$ 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
Я гуглил и RTMs, но дошел до конца пока.
git checkout --track origin/branchname
git pull origin
и нажмитеtab
, чтобы получить список удаленных филиалов. Затем продолжайте печатать и нажмитеreturn
.Ответы:
Используя bash:
после мерзавца 1.9.1 перед мерзавцем 1.9.1Обновите ветки, если в локальных ветвях отслеживания нет изменений:
Игнорируйте неоднозначные предупреждения refname, git, похоже, предпочитает локальную ветку, как и должно.
источник
git pull
есть--all
переключатель, который будет извлекать + объединять все отслеживаемые ветви.Ответ, данный Отто, хорош, но все созданные ветви будут иметь «происхождение /» в качестве начала имени. Если вы просто хотите, чтобы последняя часть (после last /) была вашими именами ветвей, используйте это:
Он также имеет то преимущество, что не дает вам никаких предупреждений о неоднозначных ссылках.
источник
grep -v master
как насчетgrep -v /HEAD
? Похоже, это отфильтровывает ветку по умолчанию, не требуя настройкиБольшинство ответов здесь чрезмерно усложняют анализ выходных данных
git branch -r
. Вы можете использовать следующийfor
цикл, чтобы создать ветви отслеживания для всех веток на пульте, как показано ниже.пример
Скажем, у меня есть эти удаленные ветви.
Убедитесь, что мы не отслеживаем ничего, кроме мастера, локально:
Вы можете использовать этот вкладыш для создания веток отслеживания:
Теперь подтвердите:
Чтобы удалить их:
Если вы используете
-vv
переключатель,git branch
вы можете подтвердить:Разбивка цикла
Цикл в основном вызывает команду
git branch -r
, отфильтровывая любые HEAD или главные ветви в выводе, используяgrep -vE "HEAD|master"
. Чтобы получить имена только ветвей минусorigin/
подстрока, мы используем манипулирование строк Bash${var#stringtoremove}
. Это удалит строку «stringtoremove» из переменной$var
. В нашем случае мы удаляем строкуorigin/
из переменной$i
.ПРИМЕЧАНИЕ. В качестве альтернативы вы также можете использовать
git checkout --track ...
это:Но мне не особенно важен этот метод, так как он переключает вас между ветвями, когда он выполняет проверку. Когда это будет сделано, вы останетесь на последней ветви, которую создали.
Ссылки
источник
Обновление Q1 2020: Мохсен Абаси предлагает в комментариях , на основе 2014 сого «ы ответа , простой альтернативе:
И он использует
$()
вместо устаревших backticks .Как я уже упоминал в другом старом ответе , использование
git for-each-ref
, вероятно, быстрее .И я бы использовал новую (Git 2.23+)
git switch
команду , которая заменяет запутаннуюgit checkout
.Таким образом, нет
grep
необходимости.Старый (2011) оригинальный ответ:
Вот мой однострочный текст, который я использую (в оболочке bash, протестирован с msysgit1.7.4):
Для копирования-вставки:
Для большей читабельности:
remote
переменной (это может быть 'origin
' или любое другое имя, которое вы указали для одного из пультов вашего текущего репозитория Git).origin/a/Branch/Name => a/Branch/Name
черезawk
выражение.он будет устанавливать восходящую ветвь через
--set-upstream-to
(или-u
) , а не--track
:Преимущество состоит в том, что, если ветвь уже существует, она не выйдет из строя и не изменит источник этой ветки, она только настроит
branch.xxx.(remote|merge)
параметр.Эта команда создаст локальные ветви для всех удаленных вышестоящих ветвей и установит их удаленные ветви и настройки слияния для этой удаленной ветви.
источник
--set-upstream-to
вместо--track
хотя.git switch
вместоgit checkout
. Но ваша (очень хорошая) идея остается.Вы могли бы написать это достаточно легко, но я не знаю, когда это будет ценно. Эти ветви довольно быстро отстают, и вам придется постоянно обновлять их.
Удаленные ветви будут автоматически обновляться, поэтому проще всего создать локальную ветку в точке, где вы действительно хотите работать с ней.
источник
git up
обновляет все местные филиалы.источник
| grep -v HEAD
к конвейеру, чтобы он работал правильно.без каких-либо сценариев (в пустой директории):
после этого все удаленные ветви будут рассматриваться как локальные.
оригинал .
источник
Если вы хотите использовать powershell и ваш пульт называется origin. Тогда это работает.
источник
git svn clone'd
репо:git branch -r | %{$_ -replace " origin/"} | %{git checkout -b $_ "origin/$_"}
git branch -r | %{$_ -replace " origin/"} | %{git branch -u "origin/$_" $_}
Используйте это, и у вас не будет такого предупреждения, как: refname 'origin / dev' является неоднозначным
источник
Вот мое решение команды BASH, ссылающейся на @tjmcewan:
Моя цель состоит в том, чтобы решить проблему, заключающуюся в том, что все созданные ветки будут иметь «origin /» в качестве начала имени, потому что я проверял, что переменные $ remote по-прежнему включают «origin /»:
источник
Чтобы сделать то же самое, что и ответ tjmcewan, но в Windows, вызовите это из командного файла :
Или это из командной строки :
источник
Начиная с версии 2.23:
-C
Флагgit switch
создает или перезагружается , если он уже существует.git switch документация
источник
Если у вас уже есть несколько проверенных веток, и вы хотите
Вы можете использовать следующий bash- и zsh-совместимый скрипт:
источник
Объяснение:
строка 1: «git branch -r» (за которой следует «git remote update» для обновления информации об изменениях в remote) перечисляет все удаленные ветви; 'egrep -vw' используется, чтобы выбить записи, имеющие HEAD и master в результате.
строка 3: отслеживание названной удаленной ветви при локальной проверке. Простой awk используется, чтобы избежать «origin /» как суффикса для локальных веток.
источник
Используя bash, если вы хотите оформить заказ во всех филиалах:
Важно отметить, что когда вы делаете выборку, которая выводит из строя новые ветви удаленного отслеживания, у вас автоматически не появляется локальных, редактируемых их копий.
источник