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.

Respostas:


147

Sim, por exemplo:

git grep res -- '*.js'

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

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.