2016-08-04 8 views
1

Ich erstellen ein Post-Commit-Skript in Python und Aufruf von Git-Befehle mit Subprozess.Nur 'git stash pop' aufrufen, wenn etwas zu pop

In meinem Skript möchte ich alle Änderungen speichern, bevor ich einige Befehle ausführen und sie dann zurückstellen. Das Problem ist, dass, wenn es nichts zu stash geben würde, stash pop einen Fehlercode ungleich Null zurückgibt, der zu einer Exception in subprocess.check_output() führt. Ich weiß, wie ich den Fehler Return Code ignorieren kann, aber ich möchte es nicht so machen.

Also habe ich nachgedacht. Gibt es eine Möglichkeit, die Anzahl der derzeit im Versteck befindlichen Gegenstände zu erhalten? Ich weiß, es gibt einen Befehl "Git Stash-Liste", aber gibt es etwas mehr für meine Bedürfnisse oder eine einfache und sichere Möglichkeit, die Ausgabe von Git Stash-Liste zu analysieren?

Auch schätzen andere Ansätze, um dieses Problem zu lösen.

+0

Überprüfen Sie, was 'git stash list' Ausgaben? – IanAuld

+0

@IanAuld: Ich weiß, was es ausgibt, eine Zeile pro Stash, die gemacht wurde. – Phat

Antwort

4

Tun Sie das nicht!

Angenommen, git stash save speichert nichts, aber dort sind bereits einige Elemente im Versteck. Wenn Sie fertig sind, wird der letzte Stash angezeigt, der nicht ist, den Sie erstellt haben.

Was haben Sie gerade mit dem Benutzer gemacht?

Eine Möglichkeit, dies in Shell-Skriptcode zu tun, ist das Ergebnis von git rev-parse refs/stash vor und nach git stash save zu überprüfen. Wenn es ändert (von Fehler zu etwas oder etwas zu etwas anderes), haben Sie einen neuen Stash erstellt, die Sie dann Pop machen können, wenn Sie fertig sind.

Neuere Versionen von Git haben git stash create, die das Commit-Paar wie üblich erstellt, aber sie nicht in die refs/stash Referenz setzen. Wenn es nichts zu speichern gibt, tut git stash create nichts und gibt nichts aus. Dies ist ein besserer Weg, um mit dem Problem umzugehen, aber ist Git-Version-abhängig.

2

Sie können einfach versuchen, git stash show [email protected]{0} aufrufen. Wenn dies erfolgreich zurückkehrt, ist etwas versteckt.