2009-12-21 19 views
15

मैं सिर्फ एक बार फिर git-blame मैनुअल पृष्ठ पढ़ सकते हैं और इस हिस्से पर ध्यान:मैं गिट का उपयोग कर कॉपी और पेस्ट कोड का पता कैसे लगा सकता हूं?

एक विशेष रूप से उपयोगी तरीका अगर एक अतिरिक्त फ़ाइल मौजूदा फ़ाइलों से कॉपी-और-चिपकाने के द्वारा बनाई गई लाइनों को देखने के लिए है। कभी-कभी यह इंगित करता है कि डेवलपर मैला हो रहा था और कोड को ठीक से दोबारा नहीं बदला। , Foo

और उसके बाद के लिए प्रतिबद्ध है और उसके माता-पिता के बीच परिवर्तन व्याख्या का उपयोग कर -

Git लॉग --diff फिल्टर = एक --pretty = कम: आप पहले प्रतिबद्ध है कि के साथ फाइल पेश किया पा सकते हैं प्रतिबद्ध ^! नोटेशन:

गिट दोष-सी-सी-एफ $ प्रतिबद्ध ^! - foo

यह काफी रोचक लगता है, लेकिन मुझे यह नहीं लगता कि यह कैसे काम करता है, और क्यों। मुझे आश्चर्य है कि कॉपी & पेस्ट कोड का पता लगाने के लिए इसे गिट हुक में इस्तेमाल किया जा सकता है या नहीं।

क्या कुछ गिट विशेषज्ञ शायद उपर्युक्त गिट कमांड का उपयोग करने के प्रभाव को समझा सकते हैं, और क्या गिट दिखाने के लिए ऐसा कुछ उपयोग करना संभव है कि क्या कोड डुप्लिकेशन है (शायद 'समानता सूचकांक' का उपयोग करके जो गिट लगता है फ़ाइलों का नाम बदलने पर गणना की जाती है)?

उत्तर

10

आप व्यक्तिगत रूप से कमांड को तोड़ सकते हैं।

$ git log --diff-filter=A --pretty=short -- foo 

फ़ाइल "foo" के लिए लॉग प्रदर्शित करता है। --diff-filter विकल्प केवल उन चीजों को दिखाता है जिनमें फाइलें शामिल की गईं ("ए"), और इसे एक संघीय प्रारूप (--pretty=short विकल्प) में दिखाती है। (-- कह रही है कि के बाद फ़ाइल नाम है जिस पर लॉग लागू किया जाना चाहिए की एक सूची है, और सब कुछ "कुछ भी नहीं है कि इस प्रकार एक विकल्प है" के लिए एक मानक है।)

फिर

:

$ git blame -C -C -f $commit^! -- foo 

git blame अंतिम प्रतिबद्धता से जानकारी के साथ फ़ाइल की प्रत्येक पंक्ति को एनोटेट करता है। डबल -C -C विकल्प अन्य फ़ाइलों से कॉपी की गई लाइनों के लिए आक्रामक रूप से जांच करता है। -f विकल्प मूल प्रतिबद्धता का फ़ाइल नाम दिखाता है (जिसका अर्थ है कि किसी अन्य फ़ाइल से एक पंक्ति की प्रतिलिपि बनाई गई थी, तो आप उस फ़ाइल का नाम देखते हैं जिसकी प्रतिलिपि बनाई गई थी)। $commit^! $ प्रतिबद्धता के लिए संकेत है; ^! प्रत्यय का अर्थ है सभी $ प्रतिबद्धताओं के माता-पिता को बाहर करना।

तो मूल रूप से, पहला आदेश (git log) आपको कॉपी की गई लाइनों को पेश करने वाली गतिविधियों को खोजने में सहायता करता है; दूसरा (git blame) स्रोत को git log द्वारा लौटाए गए किसी भी संदिग्ध काम के लिए आपको ढूंढने में सहायता करता है।

+0

स्पष्टीकरण के लिए धन्यवाद! गिट दोष के लिए डबल '-सी-सी' ध्वज वास्तव में दिलचस्प लग रहा है –

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