git grep par extensions de fichier

91

Je sais que, si je voulais grep pour un modèle uniquement sur des fichiers avec certaines extensions, je pourrais le faire:

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

J'ai également essayé de rechercher un moyen de le faire via git grep (pour tirer parti de la vitesse de git grep à partir des index qu'il stocke avec son arbre), mais en vain. J'ai vu ici que l'exclusion de certains types de fichiers n'est pas possible.

Vinay
la source

Réponses:

145

Oui, par exemple:

git grep res -- '*.js'
CB Bailey
la source
4
Une légère modification - si vous n'êtes pas à la racine de votre référentiel, git grep res -- '/*.js'ce serait peut-être mieux ...
twalberg
1
@twalberg: Mais le commentaire suggère qu'il veut regarder à partir du répertoire actuel [en bas], sûrement?
CB Bailey
3
Juste des informations supplémentaires: si vous souhaitez spécifier un ensemble d'extensions de fichiers, vous pouvez utiliser git grep res -- *.js *.cscela est traité dans une autre question
stk_sfr
3
qu'est-ce que l' --accomplit?
aehlke
1
Une chose importante à ne pas oublier est les guillemets simples autour de '* .js'. S'ils ne sont pas là, cela ne fonctionnera pas. (le shell l'interceptera avant qu'il n'atteigne git).
hasen le
3

Essayez de faire ceci:

find . -type f -iname '*.js' -exec grep -i 'pattern' {} +
Gilles Quenot
la source
1
{}est le fichier courant et +signifie traiter le maximum d'arguments en même temps contrairement {} \;(un seul fichier à la fois). Chèqueman find
Gilles Quenot
La question demande "git" grep.
jok
0

si vous souhaitez effectuer une recherche dans toutes les branches, vous pouvez utiliser les éléments suivants:

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

(Je vois que vous spécifiez git grep; pour moi, l'approche semble plus simple et plus facile à retenir - plus comme d'autres opérations dont j'ai besoin couramment.)

Kay V
la source