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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top