Ich verwende den folgenden Befehl, um herauszufinden, ob in meinem Repository ein lokaler Git-Zweig mit branch-name
vorhanden ist. Ist das richtig? Gibt es einen besseren Weg?
Bitte beachten Sie, dass ich dies in einem Skript mache. Aus diesem Grund möchte ich nach Möglichkeit Installationsbefehle verwenden .
git show-ref --verify --quiet refs/heads/<branch-name>
# $? == 0 means local branch with <branch-name> exists.
git
git-branch
git-commands
Manoj Govindan
quelle
quelle
git branch | grep -w <branch-name>
. Ok, es ist ein Porzellanbefehl, aber ich kann mir nicht vorstellen, dass sich diese spezielle Verwendung in Zukunft erheblich ändert, um dieses Snippet unbrauchbar zu machen ...git rev-parse --verify <branch_name>
Überprüft auch andere Referenzen wie Tags und Commit-Hashes. Obwohl es möglicherweise besser für Ihre Anforderungen geeignet ist, werden falsch positive Ergebnisse zurückgegeben, wenn Sie nur genau an Zweigen interessiert sind.Antworten:
Soweit ich weiß, ist dies der beste Weg, dies in einem Skript zu tun. Ich bin mir nicht sicher, ob es noch viel mehr hinzuzufügen gibt, aber es könnte genauso gut eine Antwort geben, die nur sagt "Dieser Befehl macht alles, was Sie wollen" :)
Das Einzige, worauf Sie achten sollten, ist, dass Zweignamen überraschende Zeichen enthalten können. Daher möchten Sie möglicherweise zitieren
<branch-name>
.quelle
<branch-name>
. FWIW Ich verwende dies in einem Fabric-Skript. Ich werde daran denken, die Variable zu zitieren.Wenn ich in einer Suchmaschine nach "Git Check, ob Zweig vorhanden ist" suche, ist diese Seite die erste, die ich sehe.
Ich bekomme, was ich will, möchte aber eine aktualisierte Antwort geben, da der ursprüngliche Beitrag aus dem Jahr 2011 stammt.
Dies entspricht im Wesentlichen der akzeptierten Antwort, Sie müssen jedoch nicht "refs / Heads /" eingeben.
quelle
git rev-parse --verify
sagt Ihnen nur, ob ein solches Objekt im Repo vorhanden ist (dh es gibt 0 für jeden Wert zurück, der<branch_name>
in ein Objekt eines beliebigen Typs im Repo übersetzt wird). Es sagt Ihnen nicht, ob dieses Objekt ein Zweig ist oder nicht.Fast dort.
Lass einfach das
--verify
und weg--quiet
Sie und Sie erhalten entweder den Hash, wenn der Zweig vorhanden ist, oder nichts, wenn dies nicht der Fall ist.Weisen Sie es einer Variablen zu und suchen Sie nach einer leeren Zeichenfolge.
quelle
Ich denke, Sie können
git show-branch
hier verwenden.Also $? == 0 würde anzeigen, dass der Zweig vorhanden ist und Sie sich überhaupt nicht mit der Installation von Refs / Heads / befassen müssen. Solange Sie nicht
-r
an show-branch übergeben, wird es nur in lokalen Filialen ausgeführt.quelle
git show-branch
ist ein Porzellankommando . Wie ich in meiner Frage gesagt habe, würde ich lieber keine Porzellanbefehle in einem Skript verwenden, wenn Installationsäquivalente verfügbar sind. Siehe kernel.org/pub/software/scm/git/docsgit show-branch refs/heads/[branch]
oder angebengit show-branch refs/remotes/origin/[branch]
.Ich empfehle
git show-ref --quiet refs/heads/$name
.--quiet
bedeutet, dass es keine Ausgabe gibt, was gut ist, da Sie dann den Exit-Status sauber überprüfen können.refs/heads/$name
Beschränkungen für lokale Zweige und Übereinstimmungen mit vollständigen Namen (andernfallsdev
würde dies übereinstimmendevelop
)Verwendung in einem Skript:
quelle
Zur Verwendung in einem Skript:
Dies wird
0
nur dann beendet, wenn<branch-name>
es sich um einen lokalen Zweig handelt.Beispiel:
quelle
Im Windows-Batch-Skript ist das etwas anders.
quelle
Ja, da ist einer.
Unter https://git-scm.com/docs/git-rev-parse finden Sie die Argumente und die Funktion.
quelle
Nennen wir es
git is_localbranch
(Sie müssen einen Alias hinzufügen.gitconfig
).Verwendung:
Quelle:
quelle
Das Ergebnis der Überprüfung meiner 'Vorgeschlagenen Änderung' des 'Updates' bei der ersten Frage war 'Es sollte als Kommentar oder Antwort geschrieben worden sein', daher poste ich es hier:
Der andere vorgeschlagene Weg überprüft nicht nur Zweige, sondern auch Verweise mit dem Namen @jhuynh .
Problem mit einem 'Update' bei der ersten Frage erklärt:
Nehmen wir an und überprüfen Sie, ob 'master.000' nur ein Tag ist. Ein solcher lokaler Zweig existiert nicht. Grep gibt einen Eintrag zurück, der ein Tag ist. Trotzdem gibt rev-parse 0 zurück, wenn eine Referenz vorhanden ist, auch wenn eine solche lokale Verzweigung nicht vorhanden ist. Dies ist eine falsche Übereinstimmung, genau wie von @ paul-s erwähnt
quelle
quelle
Weder
git show-ref
nochgit rev-parse
arbeitet an meinem Fall.Ich bin damit gelandet
Sie können auch mit einer Skriptdatei arbeiten
quelle
Wenn Sie es schaffen, grep einzuschließen.
quelle
grep
als Metazeichen interpretiert wird .abc
stimmt überein, wenn ein Zweig aufgerufen wirdabcdef
.Zur Verwendung in einem Skript empfehle ich den folgenden Befehl:
Beachten Sie, dass
<repo_url>
dies nur ein "." Sein kann. Geben Sie das lokale Repo an, wenn Sie sich in seiner Verzeichnisstruktur befinden, den Pfad zu einem lokalen Repo oder die Adresse eines Remote-Repos.Der Befehl gibt eine 0 zurück, wenn die
<branch_name>
nicht vorhanden ist, und eine 1, falls vorhanden.quelle
Überprüfen Sie dann, ob der Rückgabewert 0 oder 1 ist.
quelle