Wie frage ich git, ob sich das Repository in einer Konfliktphase befindet?

8

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:

%Vor%

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?

    
Shahbaz 15.12.2012, 16:01
quelle

3 Antworten

11

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:

%Vor%

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:

%Vor%

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.)

    
me_and 17.12.2012, 18:16
quelle
4

Auf GNU / irgendetwas, was ich tun würde

%Vor%     
jthill 15.12.2012 16:26
quelle
1

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.

    
Balthamos 15.12.2012 16:27
quelle

Tags und Links