Wie grep durch Ihre inszenierten Dateien vor zu begehen?
-
29-09-2019 - |
Frage
So vor git commit
zu laufen Ich werde oft den folgenden:
git grep --cached -l -I "debugger"
Ich dachte, es war ähnlich:
git diff --cached
(die Sie alle Änderungen zeigen Sie sind zu begehen, dh. Zeigen Ihnen die diff in Ihrer inszenierten Dateien).
Leider finde ich nur, dass die --cached
Option für git grep
sagt einfach git „nur“ Blick auf alles, was in seinem Index.
Wie kann ich laufen git grep
und haben es nur meine inszenierten Dateien grep durch?
(Ja, ich weiß, dass ich einfach git diff --cached
tun konnte, und dass suchen, aber ich würde lieber die programmatische Fähigkeit, durch meine inszenierten Dateien zu grep haben.)
Lösung
Wenn Sie ein Unix-ähnlich Shell zur Verfügung, die Antwort ist recht einfach:
git grep --cached "debugger" $(git diff --cached --name-only)
Diese git grep
auf der Liste der inszenierten Dateien ausgeführt wird.
Andere Tipps
Eine Menge pre-commit Haken git diff-index --cached -S<pat> REV
verwenden, um Änderungen zu finden, die hinzugefügt werden soll oder ein bestimmtes Muster entfernen. Also in Ihrem Fall git diff-index --cached -Sdebugger HEAD
. Möglicherweise möchten Sie -u
hinzufügen sowie ein Diff zu bekommen, sonst wird es identifiziert nur die problematische Datei.
Zuerst müssen Sie eine Liste von Dateien aus dem Index erhalten (mit Ausnahme von gelöschten Dateien). Dies kann mit dem folgenden getan werden:
git diff --cached --name-only --diff-filter=d HEAD
Zweitens müssen Sie die verwenden: Präfix den Inhalt einer Datei in die für den Zugriff auf aktuelle Index (inszeniert, aber noch nicht verpflichtet) finden Sie unter gitrevisions Handbuch für weitere Informationen.
git show :<file>
Schließlich ist hier ein Beispiel sie alle zusammen setzen diese Liste der Dateien grep
# Get a list of files in the index excluding deleted files
file_list=$(git diff --cached --name-only --diff-filter=d HEAD)
# for each file we found grep it's contents for 'some pattern'
for file in ${file_list}; do
git show :"${file}" | grep 'some pattern'
done
Auch hier ein Beispiel eines git pre-commit Haken, der diese Methode verwendet, um zu überprüfen, dass die Copyright-Jahre in Dateien sind auf dem neuesten Stand zu engagieren.