411 Stimmen

Wie kann man feststellen, ob eine Datei von Git überwacht wird (anhand des Shell-Exit-Codes)?

Gibt es eine Möglichkeit festzustellen, ob eine Datei verfolgt wird, indem man einige git und dessen Exit-Code überprüfen?

Mit anderen Worten: Verfolgt Git eine Datei?

543voto

hasen Punkte 154413

Versuchen:

git ls-files --error-unmatch <file name>

wird mit 1 beendet, wenn die Datei nicht verfolgt wird

87voto

cheesus Punkte 12063

Wenn Sie Ihre Konsole nicht mit Fehlermeldungen überfrachten wollen, können Sie auch

git ls-files file_name

und überprüfen Sie dann das Ergebnis. Wenn git nichts zurückgibt, wird die Datei nicht verfolgt. Wenn sie verfolgt wird, gibt Git den Dateipfad zurück.

Dies ist praktisch, wenn Sie sie in einem Skript, z. B. PowerShell, kombinieren möchten:

$gitResult = (git ls-files $_) | out-string
if ($gitResult.length -ne 0)
{
    ## do stuff with the tracked file
}

18voto

stefanB Punkte 72857

EDIT

Wenn Sie git von der Bash aus benutzen wollen, gibt es --porcelain Option zu git status :

--porzellan

Geben Sie die Ausgabe in einem stabilen, leicht zu parsierenden Format für Skripte. Derzeit ist dies identisch mit mit der --short-Ausgabe, aber es wird garantiert dass es sich in Zukunft nicht ändern wird, was es sicher für Skripte.

Die Ausgabe sieht wie folgt aus:

> git status --porcelain
 M starthudson.sh
?? bla

Oder wenn Sie nur eine Datei auf einmal bearbeiten:

> git status --porcelain bla
?? bla

ORIGINAL

tun:

git status

Es wird ein Bericht angezeigt, der angibt, welche Dateien aktualisiert wurden und welche noch nicht verfolgt werden.

Sie können sehen bla.sh nachverfolgt und geändert wird und newbla nicht nachverfolgt wird:

# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#       modified:   bla.sh
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       newbla
no changes added to commit (use "git add" and/or "git commit -a")

14voto

JaredPar Punkte 699699

Versuchen Sie zu laufen git status auf die Datei. Es wird eine Fehlermeldung ausgegeben, wenn die Datei nicht von Git verfolgt wird.

PS$> git status foo.txt
error: pathspec 'foo.txt' did not match any file(s) known to git.

6voto

Jay Walker Punkte 389

Ich kenne keinen Git-Befehl, der einen "schlechten" Exit-Code ausgibt, aber es scheint ein einfacher Weg zu sein, einen Git-Befehl zu verwenden, der keine Ausgabe für eine Datei liefert, die nicht verfolgt wird, wie git-log oder git-ls-files. Auf diese Weise müssen Sie nicht wirklich ein Parsing durchführen, Sie können es durch ein anderes einfaches Dienstprogramm wie grep laufen lassen, um zu sehen, ob es eine Ausgabe gab.

Zum Beispiel,

git-ls-files test_file.c | grep .

wird mit einem Null-Code beendet, wenn die Datei verfolgt wird, aber mit einem Exit-Code von eins, wenn die Datei nicht verfolgt wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X