2010-01-19 12 views
7

मैं किसी मौजूदा प्रोजेक्ट में फ़ाइलों के एक टन को स्थानांतरित करने जा रहा हूं। ऐसा करने से पहले, मैं एक बहु-फ़ाइल इतिहास वाले कोड का विश्लेषण करने के लिए उपयोग की जाने वाली कुछ तकनीकों पर दृढ़ समझ लेना चाहता हूं।गिट: बहु-फ़ाइल इतिहास वाले कोड का विश्लेषण कैसे करें?

मैं गिट का उपयोग कैसे पूछ सकता हूं: "कोड की यह पंक्ति कहां से आई?" जब सामग्री अपने जीवनकाल में कई फाइलों के माध्यम से चली गई है?

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

उत्तर

5

मैं गिट टूलबॉक्स में तीन टूल देखने की अनुशंसा करता हूं। पहला व्यक्ति दोष है, जो सीवी में बहुत समान है। यह आपको दिखाता है कि आखिरी बार फाइल में प्रत्येक पंक्ति को किसने स्पर्श किया। यदि आप देखना चाहते हैं कि पहले क्या था, तो आप उस प्रतिबद्धता को ले सकते हैं जो रेखा को छुआ और पिछली प्रतिबद्धता को देखें।

git show <sha1_of_interesting_commit>^ -- file/path 

आप यह देखने के लिए दोष दोहरा सकते हैं कि इससे पहले क्या हुआ था।

git blame <sha1_of_interesting_commit>^ -- file/path 

दूसरा उपकरण फ़ाइलों अतीत का नाम बदलता है ट्रैक करने के लिए --follow उपयोग कर रहा है।

git log --follow -- file/path 

तीसरा - और संभवतः सबसे उपयोगी टूल - लॉग करने के लिए pickaxe विकल्प है। यह हटाए गए, पेश किए गए या बदले गए लाइनों में बदलाव के लिए इतिहास की खोज करता है जिसमें टेक्स्ट का एक छोटा सा हिस्सा शामिल होता है। यह विशेष रूप से फ़ंक्शन नामों जैसी चीज़ों को ट्रैक करने के लिए उपयोगी होता है। यह किसी विशेष प्रतिबद्धता में फ़ाइल में नया हो सकता है, लेकिन क्या यह एक अलग स्रोत फ़ाइल से आया है? क्या इसे एक ही समय में जोड़ा गया था, या इससे पहले कि यह स्थानांतरित हो गया?

git log -S"Interesting_Function" 

आप एक पैच या स्टेट विकल्प (जैसे -p या --stat) उत्पादन उन फ़ाइलों जिसका परिवर्तन वास्तव में खोज स्ट्रिंग शामिल जब तक आप भी --pickaxe-all जहां पूरे परिवर्तन प्रदर्शित किया जाता है का उपयोग करने के लिए प्रतिबंधित कर दिया जाएगा उपयोग कर रहे हैं।

git grep के साथ संयुक्त यह दिखाने के लिए कि स्ट्रिंग की सभी मौजूदा घटनाएं कहां हैं, पिकैक्स एक बेहद उपयोगी इतिहास खनन उपकरण है।

0

git blame वह है जिसे आप पूछने के लिए उपयोग करेंगे "कोड की यह पंक्ति कहां से आई थी?"। मुझे नहीं पता कि यह नाम बदलता है या नहीं। शायद करता है

+1

लाइन चाल का पता लगाने के लिए गिट दोष अच्छा नहीं है (विशेष रूप से कोड को दोबारा प्रतिक्रिया देते समय)। मेरा मतलब है कि अगर एक देव ने रेखा लिखी, तो अगले देव ने किसी कारण से रेखा को ऊपर या नीचे ले जाया - गिट दोष बाद वाले को दिखाएगा। – Eimantas

+0

मुझे नहीं लगता कि यह उत्तर सहायक है, क्योंकि 1) 'गिट दोष' आपको नहीं बताता है कि कोड का कोई विशेष टुकड़ा कहाँ से आया था - यही वह 'गिट लॉग' है। 'गिट दोष' आपको फाइल में प्रत्येक मौजूदा कोड कोड को संपादित करने के लिए अंतिम व्यक्ति को बताता है। 2) 'गिट दोष' नामों का पालन नहीं करता है, जब तक आप स्वीकार किए गए उत्तर द्वारा इंगित किए गए '--follow' पैरामीटर को जोड़ते हैं) (और तब भी, यदि फ़ाइलों को विलय, पुनर्गठित, आदि) तो यह टूट जाता है। –