2012-06-17 13 views
18

मैं एक बहुत ही विशिष्ट परिवर्तनीय नाम से संबंधित अपने गिट इतिहास में परिवर्तनों की खोज करने की कोशिश कर रहा हूं।गिट खोज सभी diffs

मैं कोशिश यह कर दिया है:

git diff HEAD~25000 | grep -in mydistinctvariablename 

परिणाम मुझे मत बताओ जो परिणाम लाइनों के लिए प्रतिबद्ध से कर रहे हैं और यह काफी समय (5-7 मिनट) का एक सा लगता है।

क्या किसी के पास बेहतर समाधान, समय और परिणाम बुद्धिमान हैं?

+2

संभव डुप्लिकेट [गिट इतिहास कैसे करें (खोज) कैसे करें?] (Http://stackoverflow.com/questions/2928584/how-to-grep-search-the-git-history) –

+0

हम्म उनमें से कोई भी नहीं आदेश मुझे बताते हैं कि खोज परिणाम किस संशोधन से आया था, केवल उस फ़ाइल को जो फ़ाइल –

+0

में हुई थी, मेरे लिए यह परिणाम में फ़ाइल नाम से पहले SHA है। मैंने पहले जवाब में पहला आदेश इस्तेमाल किया। [दूसरा जवाब] (http://stackoverflow.com/a/2928721/211563) शायद वही है जो आप खोज रहे हैं, और यह SHA भी प्रदान करता है (बशर्ते आपका लॉग प्रारूप इसे दिखाता हो)। –

उत्तर

27

git log आमतौर पर प्रतिबद्धता इतिहास की जांच करते समय उपयोग करने का आदेश होता है। git log --grep का उपयोग प्रतिबद्ध संदेश में नियमित अभिव्यक्तियों की खोज के लिए किया जा सकता है।

क्या आप के बाद कर रहे हैं git log -S जो प्रतिबद्ध सामग्री खोज है बस या git log -G जो इसे एक नियमित अभिव्यक्ति के साथ खोज करता: मतभेद है कि परिचय या का एक उदाहरण हटाने के लिए

एस देखो। ध्यान दें कि यह diff आउटपुट में दिखाई देने वाली स्ट्रिंग से अलग है; अधिक जानकारी के लिए gitdiffcore (7) में pickaxe प्रविष्टि देखें।

तो, उदाहरण के लिए, msysGit भंडार में मैं प्रतिबद्ध है कि Tcl 8.5.8 शुरू की का उपयोग कर प्राप्त कर सकते हैं या तो:

C:\src\msysgit\src>git log --oneline --grep "8\.5\.8" 
d938476 Make `NO_SFX=1 portable-release.sh` work 
ef1dc94 Update tk to version 8.5.8 
a910049 Update tcl to version 8.5.8 
a702d7f tcltk: update to 8.5.8 and exclude release.sh from the cleanup list 

जो सिर्फ प्रतिबद्ध संदेशों में या के रूप में 8.5.8 के लिए देखा आप सीमित आप अपने नमूने में अभी भी यहाँ इस्तेमाल किया जा सकता प्रतिबद्ध जांच करने की सीमित करने के

C:\src\msysgit\src>git log --oneline -S"version=8.5.8" 
7be8622 tcltk: update release.sh script for tcl/tk 8.5.9 
a702d7f tcltk: update to 8.5.8 and exclude release.sh from the cleanup list 

सीमा: एक स्ट्रिंग है कि केवल प्रतिबद्ध diff में हुई पर देख रहे हैं करना चाहते हैं। हालांकि गिट लॉग मैनुअल सावधानी से उन सभी चीजों का अच्छा विचार पाने के लिए पढ़ें जो यह कर सकते हैं।

ध्यान दें कि -S केवल साधारण स्ट्रिंग अंतर के लिए लग रहा है - अगर आप वास्तव में आप के लिए उदाहरण के समान रेगुलर एक्सप्रेशन के उपयोग तो आप -S के बजाय -G विकल्प का उपयोग करना चाहिए सामग्री खोज करना चाहते हैं, लेकिन यह काफी धीमी हो जाएगा।

+0

यदि मैं पहले स्निपेट में, लाइन 'd938476 बना सकता हूं \ NO NOFFX = 1 पोर्टेबल-release.sh \' कार्य' उलझन में है, जैसा कि संकेत है कि पहला स्निपेट दूसरा क्या है (दूसरे शब्दों में, मैं लगता है कि यह स्पष्ट होगा अगर उस लाइन को नमूना आउटपुट से हटा दिया गया था ...) – acdcjunior

संबंधित मुद्दे