git grep dengan ekstensi file

91

Saya tahu bahwa, jika saya ingin grep untuk pola hanya pada file dengan ekstensi tertentu, saya bisa melakukan ini:

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

Saya telah mencoba mencari cara untuk melakukan ini melalui git grep juga (untuk memanfaatkan kecepatan git grep dari indeks yang disimpan dengan pohonnya), tetapi tidak berhasil. Saya melihat di sini bahwa mengecualikan jenis file tertentu tidak mungkin.

Vinay
sumber

Jawaban:

145

Ya, contohnya:

git grep res -- '*.js'
CB Bailey
sumber
4
Sedikit modifikasi - jika Anda tidak berada di root repositori Anda, git grep res -- '/*.js'mungkin lebih baik ...
twalberg
1
@twalberg: Tapi komentarnya menunjukkan bahwa dia ingin melihat dari direktori saat ini [bawah], kan?
CB Bailey
3
Hanya informasi tambahan: Jika Anda ingin menentukan satu set ekstensi file, Anda dapat menggunakan git grep res -- *.js *.csini dibahas dalam pertanyaan
stk_sfr
3
apa yang --dicapai?
aehlke
1
Satu hal penting untuk tidak dilupakan adalah tanda kutip tunggal di sekitar '* .js'. Jika mereka tidak ada, itu tidak akan berhasil. (shell akan mencegatnya sebelum mencapai git).
hasen
3

Coba lakukan ini:

find . -type f -iname '*.js' -exec grep -i 'pattern' {} +
Gilles Quenot
sumber
1
{}adalah file saat ini dan +berarti memperlakukan argumen maksimum pada saat yang sama tidak seperti {} \;(hanya satu file pada satu waktu). Cekman find
Gilles Quenot
Pertanyaannya menanyakan "git" grep.
bercanda
0

jika Anda ingin mencari di semua cabang, Anda dapat menggunakan berikut ini:

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

(Saya melihat Anda menentukan git grep; bagi saya pendekatan di sini tampaknya lebih sederhana dan lebih mudah diingat - lebih seperti operasi lain yang biasanya saya butuhkan.)

Kay V
sumber