फ़ाइल एक्सटेंशन द्वारा grep git


91

मुझे पता है कि, अगर मैं केवल कुछ एक्सटेंशन वाली फाइलों पर एक पैटर्न के लिए टटोलना चाहता था, तो मैं यह कर सकता था:

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

मैं git grep के माध्यम से ऐसा करने के तरीके की खोज करने की कोशिश कर रहा हूं (git grep की गति का लाभ लेने के लिए इसे इसके पेड़ के साथ भंडारित करता है), लेकिन कोई फायदा नहीं हुआ। मैंने यहाँ देखा कि कुछ फ़ाइल प्रकारों को छोड़ना संभव नहीं है।

जवाबों:


145

उदाहरण के लिए:

git grep res -- '*.js'

4
एक मामूली संशोधन - यदि आप अपनी रिपॉजिटरी की जड़ में नहीं हैं, git grep res -- '/*.js'तो बेहतर हो सकता है ...
twalberg

1
@twalberg: लेकिन टिप्पणी से पता चलता है कि वह वर्तमान निर्देशिका [नीचे] से देखना चाहता है, निश्चित रूप से?
सीबी बेली

3
बस अतिरिक्त जानकारी: यदि आप फ़ाइल एक्सटेंशन का एक सेट निर्दिष्ट करना चाहते हैं, तो आप इसका उपयोग git grep res -- *.js *.csकिसी अन्य प्रश्न
stk_sfr

3
क्या --पूरा करता है?
ऐहेल्के

1
मत भूलना एक महत्वपूर्ण बात '* .js' के आसपास के एकल उद्धरण हैं। यदि वे वहां नहीं हैं, तो यह काम नहीं करेगा। (शेल इसे गिट तक पहुंचने से पहले रोक देगा)।
hasen

3

ऐसा करने का प्रयास करें:

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

1
{}वर्तमान फ़ाइल है और +एक ही समय में एक ही समय में अधिकतम तर्कों का इलाज करने का मतलब है {} \;(एक समय में केवल एक फ़ाइल)। चेकman find
गिल्स क्वेनॉट

सवाल "git" grep के लिए पूछता है।
Jok

0

यदि आप सभी शाखाओं में खोज करना चाहते हैं, तो आप निम्नलिखित का उपयोग कर सकते हैं:

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

(मुझे लगता है कि आप मुझे gitp निर्दिष्ट करते हैं; मेरे लिए यहां का दृष्टिकोण सरल और याद रखने में आसान लगता है - अन्य कार्यों की तरह जिन्हें मैं आमतौर पर पसंद करता हूं।)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.