2009-11-17 15 views
5

क्या मुझे गलतफहमी है कि git grep --cached foo काम करता है? रनिंग गिट संस्करण 1.6.4.4 या 1.6.5.2, git grep --cached foo बिल्कुल git grep foo जैसा ही काम करता है।git grep --cached

मैंने सोचा कि यह git diff --cached की तरह काम करेगा, केवल स्टेजिंग क्षेत्र में परिवर्तनों को खोजेगा। यही कारण है कि निश्चित रूप से क्या man page मुझे विश्वास करना सीखें:

git diff [--options] --cached [<commit>] [--] [<path>…] 

यह फार्म परिवर्तन आप अगले के लिए मंचन देखने के लिए नामित किया गया <commit> के सापेक्ष प्रतिबद्ध है। आम तौर पर आप नवीनतम प्रतिबद्धता के साथ तुलना करना चाहते हैं, इसलिए यदि आप <commit> नहीं देते हैं, तो यह HEAD पर डिफ़ॉल्ट हो जाता है। यदि HEAD मौजूद नहीं है (उदा।, अनजान शाखाएं) और <commit> नहीं दिया गया है, यह सभी चरणबद्ध परिवर्तन दिखाता है। --staged--cached का पर्याय है।

क्या यह सिर्फ एक बग है, या क्या फू का उल्लेख करने के बारे में परिवर्तन खोजने के लिए एक वैकल्पिक/बेहतर तरीका है?

git diff --cached | grep foo 

आदेश ऊपर मुझे जो मैं चाहता के आधे देता है, लेकिन यह संदर्भ में जो की फाइल परिवर्तन में प्रकट होता है खो देता है।

अद्यतन

ऐसा प्रतीत होता है कि मैं के लिए एक अवधारणा त्रुटि है क्या --cached देख रहा है। ऐसा लगता है कि यह पेड़ की स्थिति को खोज रहा है मानते हुए स्टेजिंग क्षेत्र लागू होता है। यह समझ में आता है, अब मैं इसके बारे में सोचता हूं। क्या मैं चाहता हूं में खोज करने के लिए अंतर है, पूर्ण पेड़ नहीं।

विशेष रूप से, मैं सभी फ़ाइलों की सूची को पता है कि मैं के बारे में में SpecialLog(...) प्रतिबद्ध करने के लिए कर रहा हूँ (मैं लाइन नंबर या संदर्भ के बारे में परवाह नहीं है) चाहते हैं, तो मैं उन फ़ाइलों को संपादित जाने के लिए और SpecialLog निकाल सकते हैं। तो हाँ, मैं सिर्फ git diff --cached कर सकता हूं और SpecialLog के लिए पेजर में खोज सकता हूं, लेकिन फिर एक फ़ाइल में बड़े बदलावों के लिए, बहुत सारे डुप्लिकेट हैं और यह स्पष्ट नहीं है कि मैं कौन सी फाइल देख रहा हूं।

उत्तर

9
$ git init 
Initialized empty Git repository in /tmp/foo/.git/ 
$ echo hi there >file 
$ git add file 
$ git commit -m 'added file' 
[master (root-commit) dc08993] added file 
1 files changed, 1 insertions(+), 0 deletions(-) 
create mode 100644 file 
$ echo hi again >>file 
$ git grep again 
file:hi again 
$ git grep --cached again 
$ 

समय गुजरता है ...

$ git add file 
$ git grep --cached again 
file:hi again 

अपनी खोज के कार्यक्षेत्र अगले की सामग्री के लिए प्रतिबद्ध $PAGER को इसके उत्पादन git diff पाइप सीमित करने के लिए,। मान लें कि आपने अपने पेजर को less पर सेट किया है, git diff --cached संदर्भ में खोज मिलान दिखाता है।

$ echo SpecialLog >file2 
$ git add file2 
$ git diff-index --cached --name-only HEAD 
file 
file2 
$ git diff-index --cached -SSpecialLog --name-only HEAD 
file2 
$ git diff --cached -SSpecialLog --name-only 
file2 
+0

धन्यवाद:

परिवर्तन है कि निम्न उदाहरण में एक विशेष स्ट्रिंग उल्लेख के साथ फ़ाइलों के लिए सूची खोजें। आपने मेरी अवधारणा त्रुटि को समझने में मेरी मदद की है (विवरण में अद्यतन देखें)। तो मैं वास्तव में क्या देख रहा हूं कुछ गिट diff और grep संयोजन है। पेजर काम करता है, लेकिन यह वह नहीं है जिसे मैं ढूंढ रहा हूं;) –

+0

अद्यतन प्रतिक्रिया देखें। –

+0

मीठा! वही है जो मैं चाहता था! –