टेक्स्ट diff कैसे काम करता है?
diff इंसर्शन और डिलीशन का सबसे छोटा सेट ढूँढता है जो एक टेक्स्ट को दूसरे में बदल दे — आमतौर पर लाइन-दर-लाइन — और उसे ऐसे रूप में देता है जिसे पाठक या टूल लागू कर सके: यूनिफ़ाइड फ़ॉर्मेट हटाई गई लाइनों पर "-" और जोड़ी गई पर "+" लगाता है, ऊपर लाइन नंबर वाला हेडर होता है। व्हाइटस्पेस और लाइन-एंडिंग के अंतर (CRLF बनाम LF, पीछे की जगहें) diff के लिए असली अंतर हैं जब तक उसे अनदेखा करने को न कहा जाए — इसीलिए अपेक्षित और वास्तविक आउटपुट की तुलना से पहले अक्सर नॉर्मलाइज़ेशन चाहिए।
@@ हेडर बताता है कि hunk हर फ़ाइल में कहाँ से शुरू होता है और कितनी लाइनें घेरता है; उसके नीचे स्पेस वाली लाइन कॉन्टेक्स्ट है, - वाली हटाई गई और + वाली जोड़ी गई।यूनिफ़ाइड पैच
भाग 1:--- a/original.txt भाग 2:+++ b/modified.txt @@ भाग 3:-2,4 भाग 4:+2,5 @@ भाग 5: host: api.mutqan.sa भाग 6:- port: 8080 भाग 7:+ port: 8443 भाग 5: timeout: 30s भाग 7:+ tls: true भाग 5: features:
- 1मूल फ़ाइल
git applyसे पहले यहाँoriginal.txtकी जगह अपनी फ़ाइल का पाथ लिखें,a/रहने दें - 2बदली हुई फ़ाइलवही पाथ,
b/रहने दें - 3मूल: लाइन 2 से, 4 लाइनेंकॉन्टेक्स्ट और हटाई गई लाइनें गिनी जाती हैं
- 4बदला हुआ: लाइन 2 से, 5 लाइनेंकॉन्टेक्स्ट और जोड़ी गई लाइनें गिनी जाती हैं
- 5कॉन्टेक्स्ट लाइन (स्पेस)अपरिवर्तित; "पैच कॉन्टेक्स्ट लाइनें" तय करता है कि हर बदलाव के आसपास कितनी हों
- 6हटाई गई लाइन (
-)सिर्फ़ मूल में - 7जोड़ी गई लाइन (
+)सिर्फ़ बदले हुए टेक्स्ट में
टूल के सैंपल ("उदाहरण लोड करें") के "यूनिफ़ाइड पैच" की शुरुआत, "पैच कॉन्टेक्स्ट लाइनें" को 1 पर रखकर; डिफ़ॉल्ट 3 है।
टेक्स्ट डिफ़ कैसे इस्तेमाल करें
- बाईं ओर मूल टेक्स्ट और दाईं ओर बदला हुआ टेक्स्ट पेस्ट करें।
- Lines (लाइनें) या Words (शब्द) चुनें और ज़रूरी "अनदेखा करें" विकल्प सेट करें।
- यूनिफ़ाइड व्यू, साथ-साथ टेबल और patch देखने के लिए Compare पर क्लिक करें।
- .patch फ़ाइल डाउनलोड करें, उसकी --- और +++ लाइनों में original.txt और modified.txt को अपनी फ़ाइल के पाथ से बदलें, और git apply या patch -p1 से लागू करें।
टेक्स्ट डिफ़ की खूबियाँ
- लाइन मोड — यूनिफ़ाइड व्यू, साथ-साथ टेबल और डाउनलोड करने योग्य यूनिफ़ाइड patch के साथ
- वर्ड मोड — गद्य के लिए इनलाइन इंसर्ट/डिलीट हाइलाइटिंग
- व्हाइटस्पेस अनदेखा करें और केस अनदेखा करें के विकल्प
- समानता का प्रतिशत तथा जोड़ी गई / हटाई गई / अपरिवर्तित लाइनों की गिनती
- बड़ी फ़ाइलें तेज़ी से संभालता है; बहुत बदले हुए इनपुट के लिए ऐंकर-आधारित विभाजन
- patch में कॉन्टेक्स्ट लाइनों की संख्या सेट की जा सकती है
टेक्स्ट डिफ़ का उदाहरण
दो कॉन्फ़िगरेशन फ़ाइलों की तुलना
इनपुट:
Left: port: 8080
logging: info
Right: port: 8443
tls: true
logging: warnआउटपुट:
- port: 8080
- logging: info
+ port: 8443
+ tls: true
+ logging: warn
Similarity 0%टेक्स्ट डिफ़ के बारे में अक्सर पूछे जाने वाले सवाल
कौन-सा एल्गोरिदम इस्तेमाल होता है?
Myers O(ND) shortest-edit-script एल्गोरिदम — वही परिवार जिसे git इस्तेमाल करता है। बहुत बड़े या बहुत अलग इनपुट को अनोखी ऐंकर लाइनों पर बाँट दिया जाता है, ताकि नतीजे तेज़ और पढ़ने योग्य रहें।
क्या मुझे patch फ़ाइल मिल सकती है?
हाँ। "Unified patch" आउटपुट मानक यूनिफ़ाइड diff फ़ॉर्मैट (--- / +++ / @@ hunks) में होता है। इसकी हेडर लाइनों में फ़ाइलों के नाम a/original.txt और b/modified.txt होते हैं, और git apply पाथ इन्हीं से लेता है, इसलिए git apply या patch -p1 चलाने से पहले दोनों नाम अपनी फ़ाइल के पाथ से बदलें (a/ और b/ प्रीफ़िक्स रहने दें)।
"Ignore whitespace" क्या करता है?
जो लाइनें सिर्फ़ स्पेस, टैब या इंडेंटेशन में अलग हैं उन्हें बराबर माना जाता है। केस-असंवेदी तुलना के लिए इसे "Ignore case" के साथ इस्तेमाल करें।
वर्ड मोड लाइन मोड से कैसे अलग है?
वर्ड मोड अलग-अलग शब्दों और विराम चिह्नों को आपस में मिलाता है और जोड़-घटाव इनलाइन दिखाता है, जो गद्य और अनुवाद के लिए आदर्श है। कोड और कॉन्फ़िगरेशन फ़ाइलों के लिए लाइन मोड बेहतर है।
क्या साइज़ की कोई सीमा है?
हर टेक्स्ट 2 MB तक हो सकता है। वर्ड मोड कुल 400,000 कैरेक्टर तक सीमित है, क्योंकि वह कहीं ज़्यादा बारीक स्तर पर काम करता है।
तकनीकी नोट्स
लाइनों की तुलना Myers एल्गोरिदम से होती है, उससे पहले साझा प्रीफ़िक्स और सफ़िक्स हटा दिए जाते हैं। जब एडिट दूरी तय बजट से ज़्यादा हो जाती है, तो इंजन ऐसी लाइनें ढूँढ़ता है जो दोनों ओर अनोखी हों, उनकी स्थितियों का सबसे लंबा बढ़ता क्रम (longest increasing subsequence) निकालता है और उन ऐंकर के बीच रिकर्सिव रूप से चलता है — वही विचार जो patience diff में है — जिससे बहुत अलग डॉक्यूमेंट के नतीजे भी पढ़ने योग्य रहते हैं।
संदर्भ
- diff — POSIX.1-2017 (IEEE Std 1003.1-2017)लाइन-दर-लाइन तुलना और यूनिफ़ाइड व कॉन्टेक्स्ट आउटपुट फ़ॉर्मेट की मानक परिभाषा।