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.

Réponses:


145

Oui, par exemple:

git grep res -- '*.js'

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' {} +

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.