Es gibt viele Möglichkeiten, als Mensch zu sehen, ob das Repository Konflikte hat, die gelöst werden müssen oder nicht.
Ich suche jedoch nach einer Möglichkeit, dies in einem Skript zu überprüfen. Das heißt, um zu überprüfen, ob das Repository in einer guten Form ist, um damit anzufangen, oder in einem Stadium, in dem der Benutzer die Konflikte beheben muss.
Ich kann mir einen Weg wie folgt vorstellen:
%Vor% Ich vermute jedoch, dass dies keine empfohlene Methode ist. Erstens, weil __git_ps1
mit __
beginnt, und als C-Programmierer tendiere ich zu denken, dass es nicht für meine Verwendung ist, und zweitens rate ich, dass es einen richtigeren Weg gibt wie:
was den Rückgabewert oder etwas ähnliches hätte.
Wie also frage ich git (als Skript), ob sich das Repository in einem Merging-Zustand befindet?
Die Verwendung von git status
oder ähnlich wird in einem großen Repository langsam ausgeführt, da der Status der gesamten Arbeitskopie sowie der Index überprüft werden müssen. Wir sind nur am Index interessiert, daher können wir viel schnellere Befehle verwenden, die nur den Indexstatus überprüfen.
Insbesondere können wir git ls-files --unmerged
verwenden. Dieser Befehl erzeugt keine Ausgabe, wenn keine Dateien in einem konfliktbehafteten Zustand sind, und etwas wie das Folgende, wenn es folgende gibt:
Also können wir einfach überprüfen, ob diese Datei eine Ausgabe erzeugt: [[ -z $(git ls-files --unmerged) ]]
. Dieser Befehl gibt einen Rückgabecode von Null zurück, wenn das Repository sauber ist, und einen Wert ungleich Null, wenn das Repository Konflikte aufweist. Ersetzen Sie -z
durch -n
für das inverse Verhalten.
Sie könnten Ihrem ~/.gitconfig
Folgendes hinzufügen:
Dies führt zu folgendem Verhalten:
%Vor% (Der cd ${GIT_PREFIX:-.}
-Teil des zweiten Alias bedeutet, dass Sie nur eine Liste der widersprüchlichen Dateien im aktuellen Verzeichnis erhalten, nicht für das gesamte Repository.)
Würde das für Sie funktionieren?
%Vor% Sie können sagen, dass Sie sich in einem Zusammenführungszustand befinden, da es Ihnen mitteilt, dass eine Datei zwei Modifikationen hat und beide nicht zusammengefügt sind. Wenn Sie tatsächlich XY file
haben, wobei X
und Y
beide Buchstaben sind, haben Sie wahrscheinlich einen Konflikt, der gelöst werden muss.