Git Grep nach Dateierweiterungen

90

Ich weiß, dass ich Folgendes tun könnte, wenn ich nur für Dateien mit bestimmten Erweiterungen nach einem Muster suchen wollte:

// searches recursively and matches case insensitively in only javascript files
// for "res" from the current directory
grep -iIr --include=*.js res ./

Ich habe versucht, einen Weg zu finden, dies auch über git grep zu tun (um die Geschwindigkeit von git grep aus den Indizes zu nutzen, die es mit seinem Baum speichert), aber ohne Erfolg. Ich habe hier gesehen, dass das Ausschließen bestimmter Dateitypen nicht möglich ist.

Vinay
quelle

Antworten:

143

Ja zum Beispiel:

git grep res -- '*.js'
CB Bailey
quelle
4
Eine geringfügige Änderung - wenn Sie nicht im Stammverzeichnis Ihres Repositorys sind, git grep res -- '/*.js'könnte besser sein ...
Twalberg
1
@twalberg: Aber der Kommentar deutet darauf hin, dass er sicher aus dem aktuellen Verzeichnis [nach unten] schauen möchte?
CB Bailey
3
Nur zusätzliche Informationen: Wenn Sie eine Reihe von Dateierweiterungen angeben möchten, die Sie verwenden können, wird git grep res -- *.js *.csdies in einer anderen Frage behandelt
stk_sfr
3
Was leistet das --?
Aehlke
1
Eine wichtige Sache, die Sie nicht vergessen sollten, sind die einfachen Anführungszeichen um '* .js'. Wenn sie nicht da sind, wird es nicht funktionieren. (Die Shell wird es abfangen, bevor es Git erreicht).
hasen
3

Versuchen Sie Folgendes:

find . -type f -iname '*.js' -exec grep -i 'pattern' {} +
Gilles Quenot
quelle
1
{}ist die aktuelle Datei und +bedeutet, die maximalen Argumente gleichzeitig zu behandeln, anders als {} \;(jeweils nur eine Datei). Checkman find
Gilles Quenot
Die Frage fragt nach "git" grep.
Witz
0

Wenn Sie branchenübergreifend suchen möchten, können Sie Folgendes verwenden:

git log -Sres --all --name-only -- '*.js'

(Ich sehe, dass Sie git grep angeben. Für mich scheint der Ansatz hier einfacher und leichter zu merken zu sein - eher wie bei anderen Operationen, die ich häufig benötige.)

Kay V.
quelle