git grep por extensões de arquivo

93

Eu sei que, se eu quisesse pesquisar um padrão apenas em arquivos com certas extensões, eu poderia fazer isso:

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

Tenho tentado pesquisar uma maneira de fazer isso via git grep também (para aproveitar a velocidade do git grep dos índices que ele armazena com sua árvore), mas sem sucesso. Vi aqui que não é possível excluir certos tipos de arquivo.

Vinay
fonte

Respostas:

147

Sim, por exemplo:

git grep res -- '*.js'
CB Bailey
fonte
4
Uma pequena modificação - se você não estiver na raiz do seu repositório, git grep res -- '/*.js'pode ser melhor ...
twalberg
1
@twalberg: Mas o comentário sugere que ele quer olhar do diretório atual [para baixo], certo?
CB Bailey
3
Apenas informações extras: se você deseja especificar um conjunto de extensões de arquivo, você pode usar git grep res -- *.js *.csisso é abordado em outra pergunta
stk_sfr
3
o que o --realiza?
aehlke de
1
Uma coisa importante a não esquecer são as aspas simples em torno de '* .js'. Se eles não estiverem lá, não funcionará. (o shell irá interceptá-lo antes de chegar ao git).
hasen de
3

Tente fazer isso:

find . -type f -iname '*.js' -exec grep -i 'pattern' {} +
Gilles Quenot
fonte
1
{}é o arquivo atual e +significa tratar os argumentos máximos ao mesmo tempo, ao contrário {} \;(apenas um arquivo por vez). Verificarman find
Gilles Quenot
A questão pede o grep "git".
brincadeira de
0

se quiser pesquisar em todas as agências, você pode usar o seguinte:

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

(Vejo que você especifica git grep; para mim, a abordagem aqui parece mais simples e fácil de lembrar - mais parecida com outras operações de que eu normalmente preciso.)

Kay V
fonte