उपयोग करना git gui blame
कठिन है लिपियों का उपयोग करना, और whilst git log -G
और git log --pickaxe
प्रत्येक दिखा सकता है जब विधि परिभाषा प्रकट हुई या गायब हो गई, तो मुझे उन्हें आपके तरीके के शरीर में किए गए सभी परिवर्तनों को सूचीबद्ध करने का कोई तरीका नहीं मिला है ।
हालांकि, आप उपयोग कर सकते हैं gitattributes
और textconv
संपत्ति को एक समाधान के साथ टुकड़े करने के लिए जो बस करता है। हालाँकि ये सुविधाएँ मूल रूप से बाइनरी फ़ाइलों के साथ काम करने में आपकी मदद करने के लिए बनाई गई थीं, वे यहाँ भी काम करती हैं।
कुंजी को फ़ाइल से सभी लाइनों को हटाने के लिए है जो किसी भी अलग संचालन को करने से पहले आपकी रुचि के अलावा है। फिर git log
, git diff
आदि केवल उस क्षेत्र को देखेंगे जिसमें आप रुचि रखते हैं।
यहाँ मैं दूसरी भाषा में क्या करता हूँ इसकी रूपरेखा प्रस्तुत की गई है; आप इसे अपनी जरूरतों के लिए ट्वीक कर सकते हैं।
एक शॉर्ट शेल स्क्रिप्ट (या अन्य प्रोग्राम) लिखें जो एक तर्क लेता है - एक स्रोत फ़ाइल का नाम - और उस फ़ाइल के केवल दिलचस्प हिस्से को आउटपुट करता है (या अगर कुछ भी दिलचस्प नहीं है)। उदाहरण के लिए, आप sed
निम्नानुसार उपयोग कर सकते हैं :
#!/bin/sh
sed -n -e '/^int my_func(/,/^}/ p' "$1"
textconv
अपनी नई स्क्रिप्ट के लिए एक Git फ़िल्टर परिभाषित करें । ( gitattributes
अधिक विवरण के लिए मैन पेज देखें।) फ़िल्टर का नाम और कमांड का स्थान कुछ भी हो सकता है जिसे आप पसंद करते हैं।
$ git config diff.my_filter.textconv /path/to/my_script
प्रश्न में फ़ाइल के लिए भिन्न होने से पहले उस फ़िल्टर का उपयोग करने के लिए गिट को बताएं।
$ echo "my_file diff=my_filter" >> .gitattributes
अब, यदि आप अपने फ़िल्टर लागू होने पर दिखाई देने वाले परिवर्तनों को उत्पन्न करने वाले सभी कमिट्स को सूचीबद्ध करने के लिए -G.
(नोट .
) का उपयोग करते हैं, तो आपके पास वास्तव में वे कमिट होंगे जो आप में रुचि रखते हैं। कोई अन्य विकल्प जो गिट के अलग-अलग रूटीन का उपयोग करते हैं, जैसे कि --patch
,। यह प्रतिबंधित दृश्य भी प्राप्त करें।
$ git log -G. --patch my_file
देखा!
एक उपयोगी सुधार जो आप करना चाहते हैं, वह यह है कि आपके फ़िल्टर स्क्रिप्ट को पहले तर्क के रूप में एक विधि का नाम लेना चाहिए (और दूसरी के रूप में फ़ाइल)। यह आपको git config
अपनी स्क्रिप्ट संपादित करने के बजाय केवल कॉल करके रुचि की एक नई विधि निर्दिष्ट करने देता है । उदाहरण के लिए, आप कह सकते हैं:
$ git config diff.my_filter.textconv "/path/to/my_command other_func"
बेशक, फ़िल्टर स्क्रिप्ट आपको जो कुछ भी पसंद है वह कर सकती है, अधिक तर्क ले सकती है, या जो भी हो: मैंने यहां जो दिखाया है, उससे परे बहुत अधिक लचीलापन है।