git grep por extensiones de archivo

91

Sé que, si quisiera grep para un patrón solo en archivos con ciertas extensiones, podría hacer esto:

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

También he intentado buscar una manera de hacer esto a través de git grep (para aprovechar la velocidad de git grep de los índices que almacena con su árbol), pero fue en vano. Vi aquí que no es posible excluir ciertos tipos de archivos.

Vinay
fuente

Respuestas:

145

Si, por ejemplo:

git grep res -- '*.js'
CB Bailey
fuente
4
Una pequeña modificación: si no está en la raíz de su repositorio, git grep res -- '/*.js'podría ser mejor ...
twalberg
1
@twalberg: Pero el comentario sugiere que quiere buscar desde el directorio actual [abajo], ¿no?
CB Bailey
3
Solo información adicional: si desea especificar un conjunto de extensiones de archivo, puede usar git grep res -- *.js *.csesto se trata en otra pregunta
stk_sfr
3
que logra el --?
aehlke
1
Una cosa importante que no se debe olvidar son las comillas simples alrededor de '* .js'. Si no están ahí, no funcionará. (el shell lo interceptará antes de que llegue a git).
Hasen
3

Intente hacer esto:

find . -type f -iname '*.js' -exec grep -i 'pattern' {} +
Gilles Quenot
fuente
1
{}es el archivo actual y +significa tratar el máximo de argumentos al mismo tiempo de forma diferente {} \;(solo un archivo a la vez). Checkman find
Gilles Quenot
La pregunta pide "git" grep.
jok
0

si desea buscar en todas las ramas, puede utilizar lo siguiente:

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

(Veo que especifica git grep; para mí, el enfoque aquí parece más simple y más fácil de recordar, más como otras operaciones que necesito comúnmente).

Kay V
fuente