2010-07-29 9 views
5

diff आमतौर पर बल्कि अनजान आउटपुट उत्पन्न करता है। यहां एक अच्छा उदाहरण है। हम इस के साथ शुरू करते हैं:जीएनयू diff के विकल्प?

class World 
    def hello 
    puts "Hello, world" 
    end 
    def goodbye 
    puts "Goodbye, world" 
    end 
end 

दूसरी विधि ड्रॉप और बदलने के पहले:

class World 
    def hello 
    puts "Hello, #{self}" 
    end 
end 

diff -u कुल गड़बड़ हो जाएगा - दो तरीकों का सुझाव दे विलय कर दिया गया है:

class World 
    def hello 
- puts "Hello, world" 
- end 
- def goodbye 
- puts "Goodbye, world" 
+ puts "Hello, #{self}" 
    end 
end 

अधिक उचित के बजाय:

class World 
    def hello 
- puts "Hello, world" 
+ puts "Hello, #{self}" 
    end 
- def goodbye 
- puts "Goodbye, world" 
- end 
end 

यह सिर्फ एक खिलौना उदाहरण है, इसलिए diff का आउटपुट अभी भी समझना संभव है - अभ्यास में यह आमतौर पर बहुत खराब हो जाता है।

क्या diff पर कोई विकल्प है जो कुछ हद तक बेहतर हो सकता है?

+1

क्या आप केवल सीएलआई चाहते हैं, या आपके लिए केडीआईएफएफ जैसे ग्राफिकल ऐप्स काम करेंगे? –

+0

हाँ मैं कहने जा रहा था। कॉम्परे वास्तव में वहां आईएमओ के सबसे अच्छे अंतरों में से एक है। यदि आप आउटपुट को पार्स नहीं कर रहे हैं, तो GUI- आधारित diffs सीएलआई diff के साथ काम करने के लिए बहुत आसान है। – Gilead

+1

मैं खराब diffs के लिए बेहतर प्रदर्शन नहीं चाहता, मुझे अच्छा अंतर चाहिए। [ऐसा लगता है कि यह प्रासंगिक हो सकता है] (http://alfedenzo.livejournal.com/170301.html)। – taw

उत्तर

1

आप हमारे SD Smart Differencer पर विचार कर सकते हैं। यह "रेखा अंतर" के बजाय कोड की संरचना के आधार पर मतभेद प्रदान करता है, इसलिए यह भाषा तत्वों (अभिव्यक्तियों, बयान, ब्लॉक, विधियों) और संपादन कार्यों (हटाएं, डालें, प्रतिलिपि, प्रतिस्थापित करें, नाम बदलें) पर केंद्रित है।

यह भाषा विशिष्ट है; इसे एक गाइड के रूप में भाषा संरचना का उपयोग करना होगा। यह एक स्पष्ट लैंगेज परिभाषा का उपयोग करता है। मैं बिल्कुल बता नहीं सकता कि आप किस लैंगेज का उपयोग कर रहे हैं (पायथन?)। सी, सी ++, सी #, जावा, पायथन, फोरट्रान, कोबोल, सहित कई लैंगुग्स के लिए स्मार्ट डिफ्रेंसर टूल्स हैं ...

+1

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

+0

आप कौन सी भाषा चाहते थे? हां, प्रीप्रोसेसर निर्देशों और मैक्रो कॉल के मनमाने ढंग से प्लेसमेंट के कारण सी कोड के साथ सीमाएं हैं; ये मनमानी सी कोड में कोड संरचना की पहचान करना बहुत कठिन बनाते हैं। यह वर्तमान में रुबी के साथ काम नहीं करता है; हमने रूबी भाषा परिभाषा के साथ खेला है लेकिन यह अभी तक तैयार नहीं है .. हाँ, यह बंद स्रोत है; ओपन सोर्स संस्करण लिखने के लिए आपका स्वागत है।आपने इनमें से किसी को अपने प्रश्न में बाधाओं के रूप में नहीं बताया है। जावा, सी # और सी ++ समेत विभिन्न प्रकार की भाषाओं के लिए मूल्यांकन संस्करण उपलब्ध हैं। आपको वेबसाइट पर पूछना पड़ सकता है –

1

मैं एक diff एल्गोरिदम पर काम कर रहा हूं जो वास्तव में आप चाहते हैं, लेकिन यह एल्गोरिदम मैं हूं काम करने के लिए diff प्रक्रिया के लिए स्रोतों की संख्या पर कोई सीमा नहीं है। वर्तमान में यह बीटा में है और अभी भी परीक्षण किया जा रहा है और जब तक यह परीक्षण पूरा नहीं हो जाता है, इनलाइन व्यू कार्यात्मक नहीं है। कृपया इसे देखें और मुझे बताएं कि आप diff रिपोर्ट को कैसे तोड़ सकते हैं ताकि मैं उचित सुधार कर सकूं।

साइट:

enter image description here

उपकरण जीएनयू यदि अंतर और wdiff उपयोग करता है: http://prettydiff.com/ (GitHub)

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