Значит ли это, что вы можете отслеживать все удаленные ветви в Puppet, хотя у вас есть несколько локальных ветвей. Какие многочисленные «отслеживаемые» знаки означают, что вы видите в результате выполнения команды? "отслеживается" по какой местной ветке?
Пи Джей.
Удаленные ветки отслеживаются тем, что если вы выполняете git fetchили git pullобновления к удаленным веткам будут отслеживаться в вашем клонированном хранилище. Локальные ветви - это только то, что локальные ветви удаленных ветвей и, следовательно, обновления для удаленных ветвей будут отслеживаться и объединяться, когда будет дана соответствующая команда для этого. Я явно включаю опцию '-t' при создании локальной ветви, чтобы убедиться, что она отслеживает ветку, из которой она произошла. Помните, что локальная ветвь может также отслеживать другую локальную ветвь, поэтому она не должна быть удаленной.
Джереми Бауз
5
@PJ: Термин «трек» имеет два разных значения в Git. «Отслеживаемые» строки git remote show remote-nameотносятся к «отслеживанию веток» (снимки веток из удаленных репозиториев). Строки «слияния с» относятся к локальным ветвям, которые имеют конфигурацию «восходящая ветвь» ( создается с помощью опции --track/ git branch или git checkout и поэтому часто путается с «отслеживающими ветвями»). -t
Если вы планируете использовать информацию в автоматизированном контексте (например, в сценарии), вы должны git for-each-refвместо этого использовать более низкий уровень («слесарное дело») .
% git remote show origin
* remote origin
⋮
Local branches configured for 'git pull':
master merges with remote master
pu merges with remote pu
⋮
% git for-each-ref --format='%(refname:short) <- %(upstream:short)' refs/heads
master <- origin/master
pu <- origin/pu
git for-each-refУзнал %(upstream)фишку в Git 1.6.3 . В более ранних версиях Git вам придется извлекать информацию об отслеживании с помощью git config branch.<name>.remoteи git config branch.<name>.merge(возможно, используя git for-each-refдля построения команд для каждого локального имени ветки).
Вывод ваших ответов намного более лаконичен, и за ним легче следовать, поэтому вы получите голос "за" :)
CubanX
Чтобы сделать его менее лаконичным, но предоставьте хороший способ визуальной проверки того, что удаленные имена совпадают с именами локальных веток, это обычная git gotcha: в bashgit for-each-ref --format=$'\n'' '' '' '' '' '' ''/%(refname:short);%(upstream:short)' refs/heads | tr ';' $'\n'
hobs
19
Для конкретной ветви вы можете использовать git rev-parseс @{u}или @{upstream}суффиксом на имени ветви, например:
+1 Твой ответ дал мне именно то, что мне было нужно: git rev-parse --symbolic-full-name HEADпротив git rev-parse --symbolic-full-name HEAD@{u}, спасибо!
Тино
10
Я использую следующий сценарий оболочки (named git-tracks), чтобы показать удаленную ветку, которая отслеживается текущей веткой:
Вы можете использовать «set -e» в верхней части скрипта. Это позволит вам удалить все экземпляры "|| exit $?" сохраняя то же поведение при неудачном начале.
Джон Уитли
@JohnWhitley: Спасибо, я отредактировал свой ответ. Я знаю о set -e, но обычно придерживаюсь явной проверки. Но в этом случае это действительно лучше.
Инго Каркат
Не работает на меня git version 1.9.4. Эхоси ничего :(
Ain
8
.git/config файл также предоставит информацию о ветви отслеживания как
Мне нужно было найти соответствующую удаленную ветвь (если таковая имеется) для каждой локальной ветки в цикле, который действовал в списке локальных ветвей. Я закончил тем, что использовал следующее:
git for-each-ref --format='%(refname:short):%(upstream:short)' refs/heads | grep "^LocalBranchName:.*/" | sed "s/^LocalBranchName://"
Это ничего не выдаст (пустая строка) для локальных веток, у которых нет соответствующей удаленной ветки («someremote / somebranch»).
Ответы:
Используя пример моей копии Puppet, извлеченной из репозитория Git на Github.com ...
Тогда, если бы я должен был выполнить следующее:
И, наконец, повторите
git remote show origin
команду еще раз, затем внизу я увижу следующее:источник
git fetch
илиgit pull
обновления к удаленным веткам будут отслеживаться в вашем клонированном хранилище. Локальные ветви - это только то, что локальные ветви удаленных ветвей и, следовательно, обновления для удаленных ветвей будут отслеживаться и объединяться, когда будет дана соответствующая команда для этого. Я явно включаю опцию '-t' при создании локальной ветви, чтобы убедиться, что она отслеживает ветку, из которой она произошла. Помните, что локальная ветвь может также отслеживать другую локальную ветвь, поэтому она не должна быть удаленной.git remote show remote-name
относятся к «отслеживанию веток» (снимки веток из удаленных репозиториев). Строки «слияния с» относятся к локальным ветвям, которые имеют конфигурацию «восходящая ветвь» ( создается с помощью опции--track
/ git branch или git checkout и поэтому часто путается с «отслеживающими ветвями»).-t
Для всех филиалов:
Только для местных филиалов:
Только для удаленных филиалов:
показывает все ветки, а также название восходящей ветки.
источник
git branch -lvv
могут быть полезны только локальные ветви с апстримомgit branch -vv
работает для меня ...Джереми Бауз показывает, как
git remote show
отображается информация об отслеживании . Этого должно быть достаточно, если вы хотите получить информацию только для человека.Если вы планируете использовать информацию в автоматизированном контексте (например, в сценарии), вы должны
git for-each-ref
вместо этого использовать более низкий уровень («слесарное дело») .git for-each-ref
Узнал%(upstream)
фишку в Git 1.6.3 . В более ранних версиях Git вам придется извлекать информацию об отслеживании с помощьюgit config branch.<name>.remote
иgit config branch.<name>.merge
(возможно, используяgit for-each-ref
для построения команд для каждого локального имени ветки).источник
git for-each-ref --format=$'\n'' '' '' '' '' '' ''/%(refname:short);%(upstream:short)' refs/heads | tr ';' $'\n'
Для конкретной ветви вы можете использовать
git rev-parse
с@{u}
или@{upstream}
суффиксом на имени ветви, например:... или для сокращенной формы добавьте
--abbrev-ref
Обычно вы можете использовать
branch@{upstream}
синтаксис везде, где ожидается фиксация.источник
git rev-parse --symbolic-full-name HEAD
противgit rev-parse --symbolic-full-name HEAD@{u}
, спасибо!Я использую следующий сценарий оболочки (named
git-tracks
), чтобы показать удаленную ветку, которая отслеживается текущей веткой:Это также может использовать упомянутое
git for-each-ref
, но я обнаружил, что прямой доступ несколько проще, чем фильтрация вывода для текущей ветви.источник
set -e
, но обычно придерживаюсь явной проверки. Но в этом случае это действительно лучше.git version 1.9.4
. Эхоси ничего :(.git/config
файл также предоставит информацию о ветви отслеживания какисточник
показывает именно то, что вы просите. Он показывает локальные ветви вместе с соответствующей удаленной веткой, которую они отслеживают.
источник
Добавьте эти руны в
[alias]
раздел вашего файла .gitconfig:источник
Мне нужно было найти соответствующую удаленную ветвь (если таковая имеется) для каждой локальной ветки в цикле, который действовал в списке локальных ветвей. Я закончил тем, что использовал следующее:
Это ничего не выдаст (пустая строка) для локальных веток, у которых нет соответствующей удаленной ветки («someremote / somebranch»).
источник
Попробуйте
git branch
с опциями :В противном случае, проверьте ваш
.git/config
.источник