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?

4voto

Luca Davanzo Punkte 19769

Ich schlage eine benutzerdefinierte alias bei Ihnen .gitconfig .

Sie haben einen Weg zu tun:

1) Mit dem Befehl git:

git config --global alias.check-file <command>

2) Bearbeitung ~/.gitconfig und fügen Sie diese Zeile im Abschnitt alias hinzu:

[alias]
    check-file = "!f() { if [ $# -eq 0 ]; then echo 'Filename missing!'; else tracked=$(git ls-files ${1}); if [[ -z ${tracked} ]]; then echo 'File not tracked'; else echo 'File tracked'; fi; fi;  };  f"

Nach dem Start des Befehls (1) oder der gespeicherten Datei (2) können Sie sie auf Ihrer Arbeitsfläche testen:

$ git check-file
$ Filename missing 

$ git check-file README.md
$ File tracked 

$ git check-file foo
$ File not tracked

3voto

andreee Punkte 4114

Nur meine Meinung dazu:

git ls-files | grep -x relative/path

wobei relative/path kann leicht ermittelt werden, indem man tab innerhalb einer Autovervollständigungsshell. Hinzufügen einer zusätzlichen | wc -l um eine 1 oder 0 auszugeben.

3voto

SuperNova Punkte 20412

Mit git log wird darüber Auskunft geben. Wenn die Datei in Git verfolgt wird, zeigt der Befehl einige Ergebnisse (Protokolle) an. Andernfalls ist er leer.

Zum Beispiel, wenn die Datei von Git verfolgt wird,

root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js
commit ad9180b772d5c64dcd79a6cbb9487bd2ef08cbfc
Author: User <someone@somedomain.com>
Date:   Mon Feb 20 07:45:04 2017 -0600

    fix eslint indentation errors
....
....

Wenn die Datei nicht von Git verfolgt wird,

root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js
root@user-ubuntu:~/project-repo-directory#

0voto

Vineet Gupta Punkte 66

Ich würde bevorzugen git log -1 --oneline a git ls-files weil der Befehl git log kein Verzeichnis durchläuft, so dass die Ausgabe ähnlich ist, unabhängig davon, ob der überprüfte Pfad eine Datei oder ein Verzeichnis ist.

Hier ein Beispiel für die Ausgabe git ls-files :

vinegupt@bhoscl88-04(/imsgit_local/work/vinegupt/ims_21.8/ims_oam/MT)$ git ls-files untracked-file # Untracked file shows no output
vinegupt@bhoscl88-04(/imsgit_local/work/vinegupt/ims_21.8/ims_oam/MT)$ git ls-files form/data.json # tracked file shows its name again
form/data.json
vinegupt@bhoscl88-04(/imsgit_local/work/vinegupt/ims_21.8/ims_oam/MT)$ git ls-files form # For directory entire directory is traveresed
form/Traffic_Params_2M_IS_cont_GVolte_EATF.xls
form/data.json

Beispielhafte Ausgabe für git log -1 --oneline :

vinegupt@bhoscl88-04(/imsgit_local/work/vinegupt/ims_21.8/ims_oam/MT)$ git log -1 --oneline untracked-file # Untracked file shows no output
vinegupt@bhoscl88-04(/imsgit_local/work/vinegupt/ims_21.8/ims_oam/MT)$ git log -1 --oneline form/data.json # tracked file shows one-line output
e8e9e0f CONTAINERS-767 MT and release change for 21.8
vinegupt@bhoscl88-04(/imsgit_local/work/vinegupt/ims_21.8/ims_oam/MT)$ git log -1 --oneline form # Only directory info is given no traversal
e8e9e0f CONTAINERS-767 MT and release change for 21.8

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