टेक्स्ट की तुलना कैसे करें और अंतर कैसे खोजें
दस्तावेज़, कॉन्फ़िग फ़ाइल, या कोड के दो संस्करणों के बीच क्या बदला यह ढूंढना एक सामान्य कार्य है। दोनों संस्करणों को पढ़ना और मैन्युअल रूप से अंतर देखना धीमा और अविश्वसनीय है, खासकर लंबे टेक्स्ट के साथ। एक diff चेकर तुरंत यह करता है और हर परिवर्तन को हाइलाइट करता है। वही एल्गोरिथम जो Git के कमिट इतिहास, GitHub के पुल-रिक्वेस्ट समीक्षा इंटरफ़ेस, और Unix diff कमांड को शक्ति देता है, हर दृश्य diff टूल का आधार है जो आपने कभी उपयोग किया है।
टेक्स्ट की तुलना कैसे करें
- दोनों संस्करण चिपकाएँ: बाईं ओर मूल टेक्स्ट और दाईं ओर संशोधित टेक्स्ट दर्ज करें।
- हाइलाइट की समीक्षा करें: जोड़ी गई पंक्तियाँ हरे रंग में दिखाई जाती हैं, हटाई गई पंक्तियाँ लाल रंग में। संशोधित पंक्तियाँ दोनों पुराने और नए संस्करण दिखाती हैं।
- निर्यात या कॉपी करें: diff परिणाम कॉपी करें या एक रिपोर्ट डाउनलोड करें।
तुलना तुरंत होती है जैसे ही दोनों फलकों में टेक्स्ट होता है। क्लिक करने के लिए कोई तुलना बटन नहीं है; किसी भी तरफ संपादन वास्तविक समय में diff को फिर से चलाते हैं, जो उपयोगी है जब आप एक फिक्स पर इटरेट कर रहे हों और तुरंत प्रभाव देखना चाहते हों।
एक diff पढ़ना
diff आउटपुट एक सरल रंग प्रणाली का उपयोग करता है:
- हरा (जोड़ा गया): पंक्तियाँ जो नए संस्करण में मौजूद हैं लेकिन पुराने में नहीं
- लाल (हटाया गया): पंक्तियाँ जो पुराने संस्करण में मौजूद थीं लेकिन नए से चली गई हैं
- अपरिवर्तित: पंक्तियाँ जो दोनों संस्करणों में समान हैं
यह वही परंपरा है जो Git, GitHub, GitLab, Bitbucket, और हर प्रमुख संस्करण नियंत्रण प्रणाली द्वारा उपयोग की जाती है। रंग मनमाने नहीं हैं: 1970 के दशक से जब पहले दृश्य diff टूल (जैसे sdiff कमांड) Unix पर भेजे गए थे, जोड़ने के लिए हरा और हटाने के लिए लाल मानक रहा है। आधुनिक टूल कभी-कभी "बदला हुआ" (एक पंक्ति जो दोनों में मौजूद है लेकिन अलग है) के लिए पीला या नारंगी जोड़ते हैं, लेकिन लाल और हरा सार्वभौमिक जोड़/हटाव बने रहते हैं।
diff का एक संक्षिप्त इतिहास
diff एल्गोरिथम पहली बार 1976 में बेल लैब्स में Douglas McIlroy द्वारा प्रकाशित किया गया था, Eugene Myers के बाद के परिशोधन (O(ND) एल्गोरिथम, 1986) पर निर्मित जिसने diff को इंटरैक्टिव उपयोग के लिए पर्याप्त तेज़ बनाया। McIlroy का मूल एल्गोरिथम 1979 में Unix V7 रिलीज़ के साथ प्रकाशित हुआ और तब से हर Unix-जैसी ऑपरेटिंग सिस्टम का हिस्सा रहा है। Myers एल्गोरिथम वही है जो आधुनिक diff कार्यान्वयनों को शक्ति देता है: Git का diff, GitHub का वेब इंटरफ़ेस, Beyond Compare से VS Code तक हर diff GUI।
दृश्य साइड-बाय-साइड diff प्रारूप एल्गोरिथम से पहले का है: यह प्रकाशन में मैन्युअल प्रूफरीडिंग सम्मेलनों से जुड़ा है (दो कॉलम टेक्स्ट दिखाते हुए जिनमें परिवर्तन हाशिये में चिह्नित होते हैं)। 1970 के दशक के सॉफ़्टवेयर ने बस वही स्वचालित किया जो संपादक सदियों से कागज़ पर कर रहे थे। "एकीकृत diff" प्रारूप (जो पैच फ़ाइलों में --- और +++ हेडर वाला है जो आप देखते हैं) 1990 में GNU diff द्वारा पेश किया गया था और अब टेक्स्ट द्वारा परिवर्तन साझा करने के लिए वास्तविक मानक है।
diff जाँच कब उपयोगी है
- कोड समीक्षा: अपने परिवर्तनों की मूल के साथ तुलना करें कमिट करने से पहले यह देखने के लिए कि आपने वास्तव में क्या संशोधित किया
- दस्तावेज़ संशोधन: एक अनुबंध, लेख, या नीति के दो संस्करणों के बीच क्या बदला यह खोजें
- कॉन्फ़िगरेशन डिबगिंग: अंतर देखने के लिए एक कार्यशील कॉन्फ़िग फ़ाइल की तुलना एक टूटी हुई से करें
- डेटा सत्यापन: जाँचें कि क्या दो डेटा निर्यात समान हैं या वे कहाँ अलग होते हैं ढूंढें
- मर्ज संघर्ष: इसे हल करने से पहले एक संघर्ष के दोनों पक्षों को समझें
- अनुवाद समीक्षा: यह सुनिश्चित करने के लिए कि कोई अनुभाग नहीं छूटा एक मूल दस्तावेज़ की तुलना अनुवाद से करें
- ईमेल या संदेश तुलना: जब कोई कहता है "मैंने आपको सही संस्करण भेजा है," वास्तव में क्या बदला यह देखने के लिए दोनों संदेशों की तुलना करें
- डेटाबेस निर्यात सत्यापन: यह पुष्टि करने के लिए कि एक ETL रन ने समान आउटपुट उत्पन्न किया डेटाबेस से दो CSV निर्यातों की तुलना करें
पंक्ति-आधारित बनाम वर्ण-आधारित diff
diff चेकर पंक्ति-आधारित तुलना का उपयोग करता है, जिसका अर्थ है कि यह प्रत्येक पंक्ति को अंतर की सबसे छोटी इकाई के रूप में मानता है। यदि आप एक पंक्ति पर एक ही शब्द बदलते हैं, तो पूरी पंक्ति बदली हुई दिखाई जाती है (पुरानी पंक्ति लाल में, नई पंक्ति हरे में) और आपको शब्द-स्तरीय अंतर स्वयं देखना होगा।
पंक्ति-आधारित diff कोड और कॉन्फ़िगरेशन फ़ाइलों के लिए मानक है क्योंकि वे आमतौर पर पंक्ति-उन्मुख हैं (प्रति पंक्ति एक स्टेटमेंट, प्रति पंक्ति एक कॉन्फ़िग विकल्प)। यह तेज़, अनुमानित है, और Git और हर कोड समीक्षा टूल के काम करने के तरीके से मेल खाता है।
गद्य तुलना के लिए जहाँ पंक्ति-स्तरीय परिवर्तन बहुत मोटे हैं, कुछ टूल शब्द-स्तरीय या वर्ण-स्तरीय diff प्रदान करते हैं जो एक पंक्ति के भीतर केवल बदले गए शब्दों को हाइलाइट करता है। यह अधिक सटीक है लेकिन कोड के लिए पढ़ना कठिन है। यदि आपको शब्द-स्तरीय diff चाहिए, तो "word diff" या "intra-line diff" के रूप में विशेष रूप से लेबल किए गए टूल खोजें।
गोपनीयता और गोपनीय सामग्री
diff चेकर पूरी तरह से आपके ब्राउज़र में चलता है। दोनों टेक्स्ट के टुकड़े आपके डिवाइस पर रहते हैं; कुछ भी अपलोड नहीं किया जाता। यह मायने रखता है क्योंकि वह टेक्स्ट जिसे आप सबसे ज़्यादा तुलना करना चाहते हैं वह अक्सर गोपनीय होता है: बातचीत के तहत अनुबंध, प्रेस विज्ञप्ति के मसौदे, आंतरिक नीति दस्तावेज़, NDA के तहत स्रोत कोड। क्लाउड diff टूल (DiffChecker.com, JsonDiff.com, ऑनलाइन मर्ज टूल) के लिए दोनों टेक्स्ट को तीसरे पक्ष के सर्वर पर अपलोड करने की आवश्यकता होती है, जो ठीक वही है जो आप संवेदनशील सामग्री के लिए बचना चाहते हैं। ब्राउज़र-आधारित diff में इनमें से कोई भी एक्सपोज़र नहीं है।
सत्र भी स्टेटलेस है: टैब बंद करने के बाद कुछ भी बना नहीं रहता। यदि आपको diff का रिकॉर्ड रखना है, तो दूर नेविगेट करने से पहले आउटपुट कॉपी करें या स्क्रीनशॉट लें।
सामान्य त्रुटियाँ
- व्हाइटस्पेस शोर: अनुगामी रिक्त स्थान, मिश्रित टैब और स्पेस, और विभिन्न लाइन एंडिंग (Unix पर LF बनाम Windows पर CRLF) अक्सर "परिवर्तन" के रूप में दिखाई देते हैं भले ही दृश्य टेक्स्ट समान हो। इस मामले के लिए अधिकांश diff टूल में "व्हाइटस्पेस अनदेखा करें" टॉगल होता है।
- लाइन एंडिंग बेमेल: Windows लाइन एंडिंग (CRLF) बनाम Unix लाइन एंडिंग (LF) हर पंक्ति को बदला हुआ दिखाते हैं। यदि आप विभिन्न ऑपरेटिंग सिस्टम से फ़ाइलों की diff कर रहे हैं, तो पहले लाइन एंडिंग को सामान्यीकृत करें।
- एन्कोडिंग अंतर: UTF-8 बनाम UTF-16 बनाम Windows-1252 में टेक्स्ट समान दिख सकता है लेकिन पूरी तरह से अलग की तुलना कर सकता है। diff करने से पहले एन्कोडिंग को UTF-8 में सामान्यीकृत करें।
- पुन: व्यवस्थित समान सामग्री: यदि आप पृष्ठ 3 से एक पैराग्राफ काटते हैं और पृष्ठ 1 पर चिपकाते हैं, तो diff पैराग्राफ को पृष्ठ-3-से-हटाया-गया और पृष्ठ-1-में-जोड़ा-गया के रूप में दिखाता है भले ही सामग्री अपरिवर्तित है। कुछ टूल इसे संभालने के लिए "मूव्ड ब्लॉक डिटेक्शन" प्रदान करते हैं; बेसिक diff नहीं।
- बड़ी फ़ाइल प्रदर्शन: 10,000 से अधिक पंक्तियों वाली फ़ाइलों की तुलना ब्राउज़र को धीमा कर सकती है। बहुत बड़े diffs के लिए, कमांड-लाइन
diffया Beyond Compare जैसा डेस्कटॉप टूल का उपयोग करें।
सुझाव
- साफ़ टेक्स्ट चिपकाएँ: हेडर, फ़ुटर, या मेटाडेटा हटाएँ जिनकी आप तुलना नहीं करना चाहते। अतिरिक्त शोर वास्तविक अंतर देखना कठिन बनाता है।
- साइड-बाय-साइड व्यू का उपयोग करें: संरेखित पंक्ति संख्याओं के साथ दोनों संस्करणों को एक-दूसरे के बगल में देखना इनलाइन व्यू की तुलना में अंतर का पता लगाना आसान बनाता है।
- व्हाइटस्पेस की जाँच करें: कभी-कभी "समान" टेक्स्ट में अदृश्य अंतर होते हैं जैसे अनुगामी रिक्त स्थान, विभिन्न लाइन एंडिंग (LF बनाम CRLF), या टैब बनाम स्पेस। diff चेकर इन्हें पकड़ता है।
- गद्य के लिए पहले सामान्यीकृत करें: प्राकृतिक भाषा तुलना के लिए, diff करने से पहले दोनों टेक्स्ट को एक व्हाइटस्पेस सामान्यीकरण के माध्यम से चलाएँ या एक सादे संपादक में चिपकाएँ। यह Word या PDF से लाए गए स्वरूपण से नकली अंतरों से बचाता है।
- यदि आपको रिकॉर्ड चाहिए तो diff सहेजें: हाइलाइट की गई आउटपुट कॉपी करें या स्क्रीनशॉट लें। diff स्वचालित रूप से बना नहीं रहता।
- ऑफ़लाइन काम करता है: पृष्ठ लोड होने के बाद, तुलनाएँ आपके ब्राउज़र में स्थानीय रूप से बिना इंटरनेट के चलती हैं।
अक्सर पूछे जाने वाले प्रश्न
क्या diff वर्ण-दर-वर्ण तुलना करता है?
यह पंक्ति-दर-पंक्ति तुलना करता है, Git और अधिकांश पेशेवर diff टूल्स की समान दृष्टिकोण। यदि एक पंक्ति पर एक भी वर्ण बदलता है, तो पूरी पंक्ति बदली हुई के रूप में हाइलाइट होती है।
क्या कोई आकार सीमा है?
कोई सख्त सीमा नहीं, लेकिन बहुत बड़े टेक्स्ट (10,000 से अधिक पंक्तियाँ) प्रोसेस होने में एक पल ले सकते हैं क्योंकि तुलना पूरी तरह आपके ब्राउज़र में चलती है।
क्या मैं कोड फ़ाइलों की तुलना कर सकता हूँ?
हाँ। diff किसी भी टेक्स्ट के साथ काम करता है, जिसमें सोर्स कोड शामिल है। सिंटैक्स हाइलाइटिंग कोड diff को आसानी से पढ़ने में मदद करती है।
क्या मेरा टेक्स्ट किसी सर्वर पर भेजा जाता है?
नहीं। तुलना आपके ब्राउज़र में होती है। आपका टेक्स्ट कभी आपके डिवाइस से बाहर नहीं जाता।