Respostas:
Usando o exemplo da minha cópia do Puppet extraída do repositório Git upstream no Github.com ...
$ git remote show origin
* remote origin
Fetch URL: git://github.com/reductivelabs/puppet.git
Push URL: git://github.com/reductivelabs/puppet.git
HEAD branch: master
Remote branches:
0.24.x tracked
0.25.x tracked
2.6.x tracked
master tracked
next tracked
primordial-ooze tracked
reins-on-a-horse tracked
testing tracked
testing-17-march tracked
testing-18-march tracked
testing-2-april tracked
testing-2-april-midday tracked
testing-20-march tracked
testing-21-march tracked
testing-24-march tracked
testing-26-march tracked
testing-29-march tracked
testing-31-march tracked
testing-5-april tracked
testing-9-april tracked
testing4268 tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)
Então, se eu fosse executar o seguinte:
$ git checkout -b local_2.6 -t origin/2.6.x
Branch local_2.6 set up to track remote branch 2.6.x from origin.
Switched to a new branch 'local_2.6'
E, finalmente, execute git remote show origin
novamente o comando novamente. Verei o seguinte na parte inferior:
Local branches configured for 'git pull':
local_2.6 merges with remote 2.6.x
master merges with remote master
git fetch
ou git pull
atualizações das ramificações remotas, serão rastreadas no seu repositório clonado. As ramificações locais são exatamente isso, ramificações locais das ramificações remotas e, portanto, as atualizações nas ramificações remotas serão rastreadas e mescladas quando o comando apropriado para isso é fornecido. Incluí explicitamente a opção '-t' ao criar a ramificação local para garantir que ela rastreie a ramificação da qual se originou. Lembre-se de que uma ramificação local também pode rastrear outra ramificação local, portanto, não precisa ser uma ramificação remota.
git remote show remote-name
referem-se a "rastreamento de ramificações" (capturas instantâneas de ramificações de repositórios remotos). As linhas "mesclam com" referem-se a ramificações locais que possuem uma configuração de "ramificação upstream" (feita com a opção --track
/ -t
do ramo git ou check - out git e, portanto, frequentemente confundida com "ramos de rastreamento").
Para todos os ramos:
git branch -avv
Apenas para filiais locais:
git branch -lvv
Apenas para filiais remotas:
git branch -rvv
mostra todos os ramos, bem como o nome do ramo upstream.
git branch -lvv
mostra apenas ramos locais com a montante pode ser útil
git branch -vv
funciona para mim ...
Jeremy Bouse ilustra como git remote show
exibe informações de rastreamento . Isso deve ser suficiente se você deseja apenas as informações para consumo humano.
Se você planeja usar as informações em um contexto automatizado (por exemplo, um script), use o nível inferior (“encanamento”) 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
O git for-each-ref
aprendeu o %(upstream)
token no Git 1.6.3 . Nas versões anteriores do Git, você terá que extrair as informações de rastreamento com git config branch.<name>.remote
e git config branch.<name>.merge
(provavelmente usando git for-each-ref
para criar os comandos para cada nome de filial local).
git for-each-ref --format=$'\n'' '' '' '' '' '' ''/%(refname:short);%(upstream:short)' refs/heads | tr ';' $'\n'
Para um ramo específico, você pode usar git rev-parse
com o sufixo @{u}
ou @{upstream}
no nome do ramo, por exemplo:
$ git rev-parse --symbolic-full-name master@{u}
refs/remotes/github-mhl/master
... ou para o formulário abreviado, adicione --abbrev-ref
$ git rev-parse --symbolic-full-name --abbrev-ref master@{u}
github-mhl/master
Geralmente, você pode usar a branch@{upstream}
sintaxe sempre que uma confirmação for esperada.
git rev-parse --symbolic-full-name HEAD
vs. git rev-parse --symbolic-full-name HEAD@{u}
, obrigado!
Eu uso o seguinte script de shell (nomeado git-tracks
) para mostrar a ramificação remota que é rastreada pela ramificação atual:
#!/bin/sh -e
branch=$(git symbolic-ref HEAD)
branch=${branch##refs/heads/}
remote=$(git config "branch.${branch}.remote")
remoteBranch=$(git config "branch.${branch}.merge")
remoteBranch=${remoteBranch##refs/heads/}
echo "${remote:?}/${remoteBranch:?}"
Isso também poderia usar o mencionado git for-each-ref
, mas achei o acesso direto um pouco mais simples do que filtrar a saída do ramo atual.
set -e
, mas geralmente me ater à verificação explícita. Mas neste caso, é realmente melhor.
git version 1.9.4
. Echos nothing :(
.git/config
O arquivo também fornecerá as informações da filial de rastreamento como
[remote "Hub"]
url = ssh://xxxx/tmp/Hub
fetch = +refs/heads/*:refs/remotes/Hub/*
[branch "develop"]
remote = Hub
merge = refs/heads/develop
[branch "Dev1"]
remote = Test
merge = refs/heads/Dev1
[remote "Test"]
url = ssh://xxxx/tmp/gittesting/Dev1GIT
fetch = +refs/heads/*:refs/remotes/Test/*
Eu precisava encontrar o ramo remoto correspondente (se houver) para cada ramo local em um loop que estava atuando em uma lista dos ramos locais. Acabei usando o seguinte:
git for-each-ref --format='%(refname:short):%(upstream:short)' refs/heads | grep "^LocalBranchName:.*/" | sed "s/^LocalBranchName://"
Isso não produzirá nada (uma sequência vazia) para ramificações locais que não possuem uma ramificação remota correspondente ("someremote / somebranch").
Tente git branch
com as opções :
-r
List or delete (if used with -d) the remote-tracking branches.
-a
List both remote-tracking branches and local branches.
Caso contrário, examine o seu .git/config
.