2012-05-07 10 views
10

मैं .git/info/attributes में *.py diff=python निर्धारित किया है। तो गिट जानता है कि कार्य सीमाएं कहां हैं। गिट diff -W यह भी सुनिश्चित कर सकते हैं कि पूरा कार्य दिखाया गया है।एक या अधिक कार्यों के लिए गिट डिफ सीमा?

लेकिन वहाँ एक Git diff करने के लिए सिर्फ एक विशेष समारोह (या एक से अधिक) के उत्पादन को सीमित करने के लिए एक रास्ता है?

(उसमें असफल होने पर मुझे लगता है कि यह awk है ...)

संपादित करें यह भी git log और git rev-list के लिए उपयोगी होगा: नहीं दिखाते हैं मुझे हर प्रतिबद्ध है कि views.py संशोधित करता है, दिखाने के लिए मुझे करता है कि एक संशोधित इसमें कुछ समारोह। (हाँ, एक आदर्श दुनिया में, views.py नहीं एक 2000 लाइन विशालकाय अक्सर 8 अलग डेवलपर्स द्वारा संशोधित किया जाएगा ...)

+1

आपको यह पढ़ने योग्य लगता है: http://stackoverflow.com/questions/523307/semantic-diff-utilities – JosefAssad

+0

हाँ वें दिलचस्प है, लेकिन यह एक सुंदर अपरिपक्व क्षेत्र की तरह दिखता है। –

उत्तर

2

ठीक है, Birei पर धन्यवाद, हमारे पास एक समाधान है।

, कि जवाब में awk स्क्रिप्ट का उपयोग करें बैश का एक सा के साथ संयुक्त:

~/scripts/grit:

#!/bin/bash 
cmd=$1 
shift 1 
if [ "$cmd" = "" ]; then 
    git 
# other commands not relevant to this question go here 
elif [ $cmd = "funcdiff" ]; then 
    git show "$1:$3" | awk -f ~/scripts/getfunc.awk -v f=$4 > /tmp/.tmp1 
    git show "$2:$3" | awk -f ~/scripts/getfunc.awk -v f=$4 > /tmp/.tmp2 
    git diff -W --no-index /tmp/.tmp1 /tmp/.tmp2 

else 
    git $cmd [email protected] 
fi 

उदाहरण उपयोग: grit funcdiff 009e75 8b7a14 ./staging.py write_uploaded

यह भी ~ में एक Git उपनाम के रूप में जोड़ा जा सकता है /.gitconfig

1

मैं किसी भी अन्य विकल्प (--function-context या उसके -W कम के अलावा अन्य नहीं मिला विकल्प, पहले से ही उल्लेख किया गया है) एक एकल आउटपुट को एक समारोह में प्रतिबंधित करने में सक्षम है।

और यहां तक ​​कि -W विकल्प हमेशा पर्याप्त नहीं, जानते हुए भी कि एक 'समारोह' बहुत भाषा से भाषा को, के रूप में यह blog post में सचित्र अलग-अलग हो सकता है:

मैं इस विकल्प को नहीं बल्कि अविश्वसनीय पाया है, कम से कम एक बड़ी PHP कक्षा के भीतर।
मेरे परीक्षणों में पाया गया --function-context अक्सर लगभग सभी मूल फ़ाइल की प्रदर्शित करने में यह परिणाम है, और Git पीएचपी के समारोह सीमाओं से अनभिज्ञ दिखाई देता है।
से पहले और एक परिवर्तन के बाद संदर्भ लाइनों की संख्या यादृच्छिक लगता है, और diff जरूरी नहीं कि हमेशा की तरह, समारोह के सभी लाइनों दिखाता है या तो।

original patch message कि इस बदलाव की शुरुआत की प्रकाश डालता है:

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

तो ऐसा लगता है कि फ़ंक्शन की सीमाओं का पता लगाना गिट के लिए मुश्किल है।
ऐसा लगता है कि इस गिट में फ़ंक्शन सीमा का पता नहीं चलता है और हमें पूरी फ़ाइल का संदर्भ देता है।


OP Steve Bennett अंक के रूप में बाहर, एक संभावित समाधान आदेश उन 2 'temp' फाइलों पर diff करने के लिए, एक Git उर्फ ​​जो पहले और संशोधन के बाद संशोधन में समारोह निकालने होगा परिभाषित करने के लिए किया जाएगा। "Creating Git Aliases" और "Bash script to select a single Python function from a file" में
उदाहरण।

यह एक विज्ञापन-समाधान समाधान है जो ओपी को अपने रेपो में काम करने के लिए विशिष्ट प्रकार के स्रोत का विश्लेषण करने में सक्षम होगा।

+0

हाँ, अब मैं फ़ाइल को पार्स करने के लिए एक स्क्रिप्ट के साथ गिट उपनाम का उपयोग करके एक और tack कोशिश कर रहा हूं: http://stackoverflow.com/questions/10512351/bash-script-to-select-a-single-python-function- से-ए-फाइल मैं इस पोस्ट से प्रेरित था, जिसे मैं पूरी तरह से यादृच्छिक रूप से चला गया: http://davidwalsh.name/git-aliases –

+0

@SteveBennett दिलचस्प दृष्टिकोण। मैंने इसे अधिक दृश्यता के उत्तर में शामिल किया है, और अधिक "जेनेरिक" सुविधा की कमी के साथ इस विज्ञापन-समाधान समाधान को विपरीत बनाने के लिए। – VonC

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