Ich würde gerne wissen, ob es eine Möglichkeit gibt, festzustellen, welcher lokale Zweig welchen entfernten Zweig in Git verfolgt.
Ich verwende einen Remote-Server mit dem Namen "origin".
Ich würde gerne wissen, ob es eine Möglichkeit gibt, festzustellen, welcher lokale Zweig welchen entfernten Zweig in Git verfolgt.
Ich verwende einen Remote-Server mit dem Namen "origin".
Antworten:
Am Beispiel meiner Puppet-Kopie, die aus dem Upstream-Git-Repository auf Github.com ausgecheckt wurde ...
$ 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)
Wenn ich dann folgendes ausführen würde:
$ 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'
Führen Sie den git remote show origin
Befehl zum Schluss erneut aus. Dann wird unten unten Folgendes angezeigt:
Local branches configured for 'git pull':
local_2.6 merges with remote 2.6.x
master merges with remote master
git fetch
oder git pull
Aktualisierungen an die Remote - Niederlassungen in Ihrem geklonten Repository verfolgt werden. Die lokalen Zweige sind nur das, lokale Zweige der entfernten Zweige und somit Aktualisierungen der entfernten Zweige werden nachverfolgt und zusammengeführt, wenn der entsprechende Befehl dazu gegeben wird. Ich beziehe explizit die Option '-t' ein, wenn der lokale Zweig erstellt wird, um sicherzustellen, dass er den Zweig verfolgt, von dem er stammt. Denken Sie daran, dass eine lokale Niederlassung auch eine andere lokale Niederlassung nachverfolgen kann und keine entfernte Niederlassung sein muss.
git remote show remote-name
beziehen sich auf "Verfolgen von Zweigen" (Schnappschüsse von Zweigen aus entfernten Repositorys). Die Zeilen „Zusammenführen mit“ beziehen sich auf lokale Zweige, die eine Konfiguration für „Upstream-Zweige“ aufweisen (erstellt mit der Option --track
/ -t
von git branch oder git checkout und daher häufig mit „Tracking-Zweigen“ verwechselt).
Für alle Branchen:
git branch -avv
Nur für lokale Niederlassungen:
git branch -lvv
Nur für entfernte Zweigstellen:
git branch -rvv
Zeigt Ihnen alle Filialen sowie den Namen der vorgelagerten Filiale an.
git branch -lvv
kann es nützlich sein, nur lokale Zweige mit Upstream anzuzeigen
git branch -vv
für mich ...
Jeremy Bouse zeigt, wie git remote show
Tracking-Informationen angezeigt werden . Das sollte ausreichen, wenn Sie die Informationen nur für den menschlichen Verzehr benötigen.
Wenn Sie die Informationen in einem automatisierten Kontext (z. B. einem Skript) verwenden möchten, sollten Sie git for-each-ref
stattdessen die niedrigere Ebene („Sanitär“) verwenden.
% 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
Die haben git for-each-ref
das %(upstream)
Token in Git 1.6.3 gelernt . In früheren Versionen von Git müssen Sie die Tracking-Informationen mit git config branch.<name>.remote
und extrahieren git config branch.<name>.merge
(wahrscheinlich git for-each-ref
zum Erstellen der Befehle für jeden lokalen Zweignamen).
git for-each-ref --format=$'\n'' '' '' '' '' '' ''/%(refname:short);%(upstream:short)' refs/heads | tr ';' $'\n'
Für einen bestimmten Zweig können Sie git rev-parse
mit dem Suffix @{u}
oder @{upstream}
auf dem Zweignamen Folgendes verwenden:
$ git rev-parse --symbolic-full-name master@{u}
refs/remotes/github-mhl/master
... oder für die Kurzform hinzufügen --abbrev-ref
$ git rev-parse --symbolic-full-name --abbrev-ref master@{u}
github-mhl/master
Sie können die branch@{upstream}
Syntax im Allgemeinen überall dort verwenden, wo ein Commit erwartet wird.
git rev-parse --symbolic-full-name HEAD
vs. git rev-parse --symbolic-full-name HEAD@{u}
, danke!
Ich verwende das folgende Shell-Skript (benannt git-tracks
), um den Remote-Zweig anzuzeigen, der vom aktuellen Zweig verfolgt wird:
#!/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:?}"
Dies könnte auch das erwähnte verwenden git for-each-ref
, aber ich fand den direkten Zugriff etwas einfacher als das Filtern der Ausgabe für den aktuellen Zweig.
set -e
aber normalerweise an die explizite Prüfung. Aber in diesem Fall ist es wirklich besser.
git version 1.9.4
. Echos nichts :(
.git/config
Die Datei enthält auch die Informationen zum Verfolgungszweig als
[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/*
Ich musste den entsprechenden Remote-Zweig (falls vorhanden) für jeden lokalen Zweig in einer Schleife finden, die auf eine Liste der lokalen Zweige reagierte. Am Ende habe ich Folgendes verwendet:
git for-each-ref --format='%(refname:short):%(upstream:short)' refs/heads | grep "^LocalBranchName:.*/" | sed "s/^LocalBranchName://"
Dies wird nichts (eine leere Zeichenkette) für lokale Zweige ausgeben, die keinen entsprechenden entfernten Zweig haben ("someremote / somebranch").
Versuchen Sie es git branch
mit Optionen :
-r
List or delete (if used with -d) the remote-tracking branches.
-a
List both remote-tracking branches and local branches.
Andernfalls überprüfen Sie Ihre .git/config
.