Vorrei sapere se c'è un modo per dire quale filiale locale sta monitorando quale filiale remota in Git.
Sto usando un server remoto, che si chiama "origine".
Vorrei sapere se c'è un modo per dire quale filiale locale sta monitorando quale filiale remota in Git.
Sto usando un server remoto, che si chiama "origine".
Risposte:
Usando l'esempio della mia copia di Puppet estratto dal repository Git upstream su 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)
Quindi se dovessi eseguire quanto segue:
$ 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 infine rieseguire nuovamente il git remote show origin
comando, vedrò in basso in basso:
Local branches configured for 'git pull':
local_2.6 merges with remote 2.6.x
master merges with remote master
git fetch
o gli git pull
aggiornamenti ai rami remoti verranno tracciati nel repository clonato. I rami locali sono proprio questo, i rami locali dei rami remoti e quindi gli aggiornamenti ai rami remoti verranno tracciati e uniti quando viene dato il comando appropriato per farlo. Includo esplicitamente l'opzione '-t' quando si crea il ramo locale per assicurarsi che segua il ramo da cui proviene. Ricorda che un ramo locale può anche tenere traccia di un altro ramo locale, quindi non deve essere un ramo remoto.
git remote show remote-name
riferiscono a "rami di tracciamento" (istantanee di rami da repository remoti). Le linee "si fonde con" si riferiscono ai rami locali che hanno una configurazione "ramo a monte" (realizzata con l' opzione --track
/ -t
di git branch o git checkout e quindi spesso confusa con "tracking rami").
Per tutte le filiali:
git branch -avv
Solo per filiali locali:
git branch -lvv
Solo per filiali remote:
git branch -rvv
mostra tutti i rami e il nome del ramo a monte.
git branch -lvv
potrebbero essere utili solo le filiali locali con upstream
git branch -vv
funziona per me ...
Jeremy Bouse illustra come git remote show
vengono visualizzate le informazioni di tracciamento . Ciò dovrebbe essere sufficiente se si desidera solo l'informazione per il consumo umano.
Se si prevede di utilizzare le informazioni in un contesto automatizzato (ad esempio uno script), è necessario utilizzare invece il livello inferiore ("impianto idraulico") 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
Il token git for-each-ref
appreso %(upstream)
in Git 1.6.3 . Con le versioni precedenti di Git dovrai estrarre le informazioni di tracciamento con git config branch.<name>.remote
e git config branch.<name>.merge
(probabilmente usando git for-each-ref
per creare i comandi per ciascun nome di filiale locale).
git for-each-ref --format=$'\n'' '' '' '' '' '' ''/%(refname:short);%(upstream:short)' refs/heads | tr ';' $'\n'
Per un ramo specifico, è possibile utilizzare git rev-parse
con il suffisso @{u}
o @{upstream}
sul nome del ramo, ad esempio:
$ git rev-parse --symbolic-full-name master@{u}
refs/remotes/github-mhl/master
... o per la forma abbreviata, aggiungere --abbrev-ref
$ git rev-parse --symbolic-full-name --abbrev-ref master@{u}
github-mhl/master
In genere è possibile utilizzare la branch@{upstream}
sintassi ovunque sia previsto un commit.
git rev-parse --symbolic-full-name HEAD
vs. git rev-parse --symbolic-full-name HEAD@{u}
, grazie!
Uso il seguente script di shell (denominato git-tracks
) per mostrare il ramo remoto che viene tracciato dal ramo corrente:
#!/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:?}"
Questo potrebbe anche usare il menzionato git for-each-ref
, ma ho trovato l'accesso diretto un po 'più semplice che filtrare l'output per il ramo corrente.
set -e
, ma di solito attenersi al controllo esplicito. Ma in questo caso, è davvero meglio.
git version 1.9.4
. Echos niente :(
.git/config
il file fornirà anche le informazioni sul ramo di tracciamento come
[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/*
Avevo bisogno di trovare il ramo remoto corrispondente (se presente) per ogni ramo locale all'interno di un ciclo che stava agendo su un elenco dei rami locali. Ho finito per usare il seguente:
git for-each-ref --format='%(refname:short):%(upstream:short)' refs/heads | grep "^LocalBranchName:.*/" | sed "s/^LocalBranchName://"
Questo non genererà nulla (una stringa vuota) per i rami locali che non hanno un ramo remoto corrispondente ("someremote / somebranch").
Prova git branch
con le opzioni :
-r
List or delete (if used with -d) the remote-tracking branches.
-a
List both remote-tracking branches and local branches.
Altrimenti, esamina il tuo .git/config
.