Wie lösche ich einen Branch ohne Fehlermeldung, wenn der Branch nicht existiert?

Lesezeit: 3 Minuten

Ich möchte einen Befehl zum Löschen einer lokalen Git-Verzweigung in ein Skript einfügen, und ich möchte nicht, dass eine Fehlermeldung angezeigt wird, wenn die Verzweigung nicht vorhanden ist. Gleichzeitig möchte ich auch keinen Statuscode, der einen Fehler des Git-Befehls anzeigt.

Angenommen das folgende Beispiel:

git branch -D foo

Wenn die Verzweigung existiert, wird sie gelöscht, und der Rückgabestatus des Befehls ist 0, was auf Erfolg hinweist. Wenn ich dasselbe Skript erneut ausführe, ist der Zweig nicht mehr vorhanden, daher schlägt der Befehl fehl und wird gedruckt

error: branch 'foo' not found.

und der Rückgabestatus des Git-Befehls ist >0, was auf einen Fehler hinweist.

Gibt es einen Weg zu Schweigen das Kommando, sodass es egal ist, ob die Filiale überhaupt da war? Idealerweise würde es keine Fehlermeldung ausgeben und es würde auch keinen Fehler durch einen Nicht-Null-Rückgabestatus anzeigen.

Ich weiß, dass ich diese Dinge mit etwas Skripting-Magie umgehen kann, aber ich würde eine einfache Lösung bevorzugen, da ich dasselbe unter Windows tun muss (.Schläger) und für Unix/Linux/Mac (.Sch).

Habe ich eine Option verpasst oder habe ich Pech?

  • Eng verwandt stackoverflow.com/questions/14392349/…

    – Petri Ryhänen

    10. Januar 2020 um 13:26 Uhr

Benutzer-Avatar
mockinterface

Wenn die Verzweigung existiert, wird sie gelöscht, und der Rückgabestatus … ist 0, … Gibt es eine Möglichkeit, den Befehl zum Schweigen zu bringen, sodass es egal ist, ob die Verzweigung dort war … es würde keinen Fehler ausgeben Nachricht und es würde auch keinen Fehler durch einen Nicht-Null-Rückgabestatus anzeigen.

Die folgenden Beispiele unterdrücken alle Ausgaben und zeigen den Erfolg oder Misserfolg über den Exit-Code an:

Linux   $ git branch -D <branch> &>/dev/null    
Windows $ git branch -D <branch> 1>nul 2>nul

Wenn Sie beabsichtigen, den Exit-Code bewusst zu ignorieren, markieren Sie ihn einfach nicht und fahren Sie mit dem nächsten Befehl in Ihrem Skript fort.

Oder, wenn Sie dann mit einem Nullcode aussteigen müssen

Linux   $ git branch -D <branch> &>/dev/null || true  
Windows $ git branch -D <branch> 1>nul 2>nul || ver>nul

  • Beachten Sie, dass das Skript beendet wird, wenn Sie Ihr Skript unter bash oder sh (und wahrscheinlich ksh?) mit dem Schalter “-e” ausführen, also “existieren, wenn ein Befehl einen Fehler zurückgibt”. Sie können dies verhindern und einen solchen fehlgeschlagenen Befehl behandeln: “git branch -D &>/dev/null || true”. Dies wird “true” ausführen, wenn git einen Fehler zurückgibt, wodurch die gesamte Anweisung in allen Fällen effektiv in eine erfolgreiche Ausführung umgewandelt wird.

    – Jędrzej Dudkiewicz

    26. Oktober 2018 um 9:54 Uhr

Versuche dies:

branch="${1:?foo}"  

if git show-ref --verify --quiet "refs/heads/$branch"; then
echo "Branch exists."
.......

  • Guter Punkt – ich könnte eine if-Anweisung verwenden, aber ich müsste dasselbe auch für das Windows-Skript tun. Ich hatte auf einen Schalter gehofft, den ich beim Befehl “git branch” verpasst habe.

    – Winkler

    13. März 2014 um 12:16 Uhr

Für Windows Powershell löscht der folgende Befehl alle lokalen Zweige mit Ausnahme des aktuellen Zweigs

git branch | %{ $_.Trim() } | ?{ $_ -notmatch '\*' } | %{ git branch -D $_ }

Verwenden Sie den Kernbefehl, nachdem der Befehl ausgeführt wurde, dass ref weg ist, sodass das Ergebnis als erfolgreich angesehen wird:

git update-ref -d refs/heads/$branch

Dinge wie diese sind einer der Gründe für die Regel “Verwenden Sie keine Convenience-Akay-Befehle für die Skripterstellung”, die so weithin ignoriert wird.

1085550cookie-checkWie lösche ich einen Branch ohne Fehlermeldung, wenn der Branch nicht existiert?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy