dosya uzantılarına göre git grep


91

Biliyorum, bir kalıbı yalnızca belirli uzantılara sahip dosyalarda grep etmek istersem, bunu yapabilirdim:

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

Bunu git grep aracılığıyla yapmanın bir yolunu da aramaya çalışıyorum (git grep'in ağacıyla birlikte depoladığı dizinlerden hızından yararlanmak için), ama boşuna. Burada belirli dosya türlerinin hariç tutulmasının mümkün olmadığını gördüm .

Yanıtlar:


145

Evet, örneğin:

git grep res -- '*.js'

4
Küçük bir değişiklik - eğer git grep res -- '/*.js'
deponuzun

1
@twalberg: Ama yorum onun şu anki dizinden [aşağı] bakmak istediğini gösteriyor, kesinlikle?
CB Bailey

3
Ek bilgi: Bir dizi dosya uzantısı belirtmek isterseniz, git grep res -- *.js *.csbunu başka bir soruda ele alabilirsiniz
stk_sfr

3
ne --başarır?
aehlke

1
Unutulmaması gereken önemli bir nokta, '* .js' etrafındaki tek tırnaktır. Orada değillerse, işe yaramayacak. (kabuk git'e ulaşmadan onu durdurur).
hasen

3

Bunu yapmayı dene:

find . -type f -iname '*.js' -exec grep -i 'pattern' {} +

1
{}geçerli dosyadır ve +maksimum argümanları aynı anda ele almak anlamına gelir {} \;(bir seferde yalnızca bir dosya). Çekman find
Gilles Quenot

Soru "git" grep'i ister.
2019

0

tüm şubelerde arama yapmak istiyorsanız, aşağıdakileri kullanabilirsiniz:

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

(Git grep'i belirttiğinizi görüyorum; bana buradaki yaklaşım daha basit ve hatırlaması daha kolay görünüyor - daha çok ihtiyacım olan diğer işlemler gibi.)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.