पाठ तुलना और विलय
एक टेक्स्ट के दो संस्करण पेस्ट करें और उन्हें रंगीन अंतरों के साथ पंक्ति-दर-पंक्ति तुलना करें।
तुलना परिणाम
यह कैसे काम करता है
- दो टेक्स्ट पेस्ट करें: बाएँ पैनल में मूल टेक्स्ट और दाएँ में संशोधित टेक्स्ट दर्ज करें।
- अंतर देखें: संशोधित पंक्तियाँ हाइलाइट की गई हैं, जोड़ के लिए हरा, हटाव के लिए लाल।
- diff ब्राउज़ करें: रंगीन परिवर्तनों के माध्यम से स्क्रॉल करें और ज़रूरत के अनुसार हिस्से कॉपी या स्क्रीनशॉट लें।
Diff का संक्षिप्त इतिहास
आधुनिक टेक्स्ट डिफिंग बेल लैब्स में शुरू हुई। Douglas McIlroy (वही McIlroy जिन्होंने Unix पाइप का आविष्कार किया) और James W. Hunt ने 1970 के दशक की शुरुआत में मूल Unix diff लिखा; यह 1974 में Unix के 5वें संस्करण के हिस्से के रूप में जारी किया गया। एल्गोरिथम को बेल लेबोरेटरीज कंप्यूटिंग साइंस टेक्निकल रिपोर्ट #41 (जून 1976) में दस्तावेज़ित किया गया था, एक आंतरिक रिपोर्ट जिसका शीर्षक था "An Algorithm for Differential File Comparison"। Hunt-McIlroy एल्गोरिथम सबसे लंबी सामान्य उप-अनुक्रम (LCS) समस्या पर बनाया गया है, दोनों इनपुट में क्रम में दिखाई देने वाली लाइनों का सबसे लंबा अनुक्रम खोजें, और उस अनुक्रम में नहीं होने वाली हर चीज़ या तो हटाना है या सम्मिलन है। एक दशक बाद, Eugene W. Myers ने Algorithmica, खंड 1 अंक 2 (1986) में "An O(ND) Difference Algorithm and Its Variations" प्रकाशित किया। Myers ने समस्या को एक "edit graph" पर सबसे छोटे-पथ खोज के रूप में फिर से तैयार किया और दिखाया कि इसे O(ND) समय और स्थान में हल किया जा सकता है, जहां N इनपुट का आकार है और D न्यूनतम संपादन स्क्रिप्ट का आकार है। विशिष्ट इनपुट के लिए, ऐसी फ़ाइलें जो केवल कुछ स्थानों पर भिन्न हैं, D छोटा है, इसलिए एल्गोरिथम व्यवहार में तेज़ है। Myers का पेपर एक तेज़ Unix diff कार्यान्वयन का आधार बना जो अपने पूर्ववर्ती से दो से चार गुना तेज़ चलता था और उच्च गुणवत्ता वाला आउटपुट उत्पन्न करता था। Patience diff (Bram Cohen, 2008) एक LCS परिशोधन है जो अद्वितीय एंकर लाइनों को प्राथमिकता देता है, स्थानांतरित ब्लॉकों के आसपास अधिक पठनीय diff उत्पन्न करता है। git diff में वर्तमान डिफ़ॉल्ट LibXDiff में हिस्टोग्राम एल्गोरिथम है, आमतौर पर वैनिला Myers से तेज़ माना जाता है और स्थानांतरित ब्लॉकों की उपस्थिति में अधिक पठनीय diff उत्पन्न करता है (यह Git का डिफ़ॉल्ट 2.11 में बना, 29 नवंबर 2016 को जारी)। गणितीय आधार और भी गहराई तक जाते हैं: Levenshtein दूरी (Vladimir Levenshtein, 1965) LCS समस्या का वर्ण-स्तरीय चचेरा भाई है, और Wagner-Fischer डायनेमिक प्रोग्रामिंग समाधान (1974) वही है जो हर "fuzzy match" लाइब्रेरी अभी भी आंतरिक रूप से लागू करती है।
Diff कैसे रेंडर किया जाता है
Diff प्रदर्शित करने के लिए चार सामान्य दृश्य परंपराएँ हैं। साइड-बाई-साइड, दो कॉलम, बाईं ओर मूल, दाईं ओर संशोधित, संबंधित लाइनों के साथ संरेखित। एक नज़र में तुलना के लिए अच्छा; डेस्कटॉप चौड़ाई पर अच्छी तरह से काम करता है लेकिन संकीर्ण मोबाइल व्यूपोर्ट पर अपठनीय हो जाता है। इनलाइन यूनिफाइड diff, एक एकल कॉलम हटाई गई लाइनों को दिखा रहा है (आमतौर पर - के साथ उपसर्ग और लाल रंग का), जोड़ी गई लाइनों (+, हरा), और अपरिवर्तित संदर्भ लाइनों (कोई उपसर्ग नहीं, सादा पाठ)। लेआउट जो git diff डिफ़ॉल्ट रूप से उपयोग करता है। मोबाइल पर अच्छी तरह से स्केल करता है लेकिन साइड-बाई-साइड का स्थानिक समानता खो देता है। शब्द-स्तरीय diff, बदली गई लाइनों के भीतर केवल बदले गए शब्दों को हाइलाइट करना। गद्य तुलना के लिए उपयोगी जहां अधिकांश पाठ अपरिवर्तित है लेकिन विशिष्ट वाक्यांश संपादित किए गए थे। वर्ण-स्तरीय diff, प्रत्येक बदले गए वर्ण को व्यक्तिगत रूप से हाइलाइट करना। बहुत छोटे परिवर्तनों (एक टाइपो सुधार, एकल-अंक संपादन) के लिए उपयोगी जहां शब्द-स्तर पूरे शब्द को हाइलाइट करेगा। रंग परंपराएँ पारिस्थितिकी तंत्र में उल्लेखनीय रूप से सुसंगत हैं: जोड़ने के लिए हरा, हटाने के लिए लाल, बदले गए मानों के लिए पीला या एम्बर, अपरिवर्तित के लिए तटस्थ ग्रे या बिना स्टाइल के। यह उपकरण बदली गई लाइनों के अंदर वर्ण-स्तरीय हाइलाइटिंग के साथ इनलाइन यूनिफाइड शैली का उपयोग करता है, एक हाइब्रिड जो मोबाइल पर अच्छी तरह से स्केल करता है जबकि गद्य संपादनों के लिए वर्ण-स्तरीय तुलना की सटीकता को संरक्षित करता है।
तीन-तरफ़ा मर्ज, जब दो diff को संयोजित होने की आवश्यकता हो
दो-तरफ़ा diff (यह उपकरण) आपको बताता है कि संस्करण A और संस्करण B के बीच क्या बदल गया। एक तीन-तरफ़ा मर्ज एक कठिन प्रश्न का उत्तर देता है: एक सामान्य पूर्वज और दो भिन्न संशोधनों को देखते हुए, संयुक्त परिणाम क्या है जो परिवर्तनों के दोनों सेटों को शामिल करता है? यह हर संस्करण नियंत्रण प्रणाली का मुख्य ऑपरेशन है, जब दो डेवलपर्स स्वतंत्र रूप से एक ही फ़ाइल को संपादित करते हैं और एक उनके काम को मर्ज करने का प्रयास करता है, तो सिस्टम को मूल पर दोनों diff लागू करने की आवश्यकता होती है। Khanna, Kunal और Pierce (2007) द्वारा औपचारिक रूप दिया गया diff3 एल्गोरिथम आधार है। सात-वर्ण संघर्ष मार्कर परंपरा, <<<<<<<, =======, >>>>>>>, जो Git फ़ाइलों में डालता है जब एक स्वचालित मर्ज विफल हो जाता है, सीधे इस वंश से आता है। आधुनिक दृश्य मर्ज उपकरण (VS Code का तीन-फलक मर्ज संपादक, जून 2022 में 1.69 से डिफ़ॉल्ट-चालू; Scooter Software से Beyond Compare, 1996 से; Meld; macOS के लिए Black Pixel द्वारा Kaleidoscope) तीन-तरफ़ा मर्ज को सभी तीन संस्करणों के साइड-बाई-साइड रेंडरिंग के साथ प्रस्तावित मर्ज परिणाम के लिए चौथे फलक के साथ संभालते हैं। यह उपकरण दो-तरफ़ा तुलना पर केंद्रित है, तीन-तरफ़ा मर्जिंग एक वास्तविक संस्करण नियंत्रण वर्कफ़्लो में है।
सामान्य उपयोग के मामले
- कोड समीक्षा। परिवर्तन को जल्दी से देखने के लिए किसी फ़ंक्शन या मॉड्यूल के दो संस्करण पेस्ट करना, विशेष रूप से Git वर्कफ़्लो के बाहर काम करते समय (किसी सहकर्मी के ईमेल से एक स्निपेट, Stack Overflow उत्तर बनाम आपका वर्तमान कोड)।
- कानूनी अनुबंध तुलना। वकील और अनुबंध वार्ताकार नियमित रूप से अनुबंध के दो संस्करणों की तुलना करते हैं यह देखने के लिए कि दूसरे पक्ष ने क्या बदला है। लीगल-टेक शब्द "blackline" या "redline" तुलना है; Draftable जैसे उत्पाद इसमें विशेषज्ञ हैं।
- गद्य संपादन। लेखक के मसौदे की संपादक के संशोधन के साथ तुलना करना, या किसी लेख के दो संस्करण। Microsoft Word का परिवर्तन ट्रैक उत्पाद के भीतर ऐसा करता है; सादे-पाठ या Markdown मसौदों के लिए, एक diff उपकरण समतुल्य है।
- कॉन्फ़िगरेशन ड्रिफ्ट। उत्पादन में एक कॉन्फ़िग फ़ाइल की तुलना सोर्स कंट्रोल में संस्करण से करना, अंतर ड्रिफ्ट है। पर्यावरण-विशिष्ट कॉन्फ़िगरेशन (dev बनाम staging बनाम production) के लिए वही वर्कफ़्लो।
- लॉग तुलना। विचलन बिंदु खोजने के लिए एक ही प्रक्रिया के अलग-अलग रनों से दो लॉग फ़ाइलों को diff करना।
- स्थानीयकरण समीक्षा। अनुवादक अक्सर पिछले संस्करण के खिलाफ एक नए अंग्रेज़ी स्रोत को diff करते हैं ताकि यह पहचान सकें कि क्या नया है और अनुवाद की आवश्यकता है।
2026 में Diff पारिस्थितिकी तंत्र
git diff और Unix diff से परे, कई विशेष diff उपकरण उल्लेख के योग्य हैं। Beyond Compare (Scooter Software, 1996) लंबे समय से चली आ रही व्यावसायिक फ़ोल्डर-और-फ़ाइल तुलना उपकरण है, क्रॉस-मशीन डिफिंग के लिए डेवलपर्स और IT पेशेवरों के बीच लोकप्रिय। Meld (ओपन सोर्स, GTK-आधारित) GNOME डिफ़ॉल्ट है। Kaleidoscope (Black Pixel, macOS) संस्करण नियंत्रण के साथ एकीकृत होता है और कई Mac डेवलपर्स के लिए वास्तविक विकल्प है। VS Code का अंतर्निहित diff संपादक दो-तरफ़ा और तीन-तरफ़ा तुलना को मूल रूप से संभालता है; तीन-फलक मर्ज संपादक 1.69 (जून 2022) में डिफ़ॉल्ट-चालू बन गया। Mergely (Wayne Stidolph, 2013, MIT-लाइसेंस प्राप्त) CodeMirror पर निर्मित विहित ब्राउज़र-आधारित दो-तरफ़ा मर्ज संपादक है। jsdiff (Kevin Decker, ~2010) प्रमुख JavaScript diff लाइब्रेरी है, जिसका उपयोग आपने जिस भी ब्राउज़र-आधारित diff उपकरण में पेस्ट किया है। diff-match-patch (Google के Neil Fraser, 2006) वैकल्पिक लाइब्रेरी है जो diffing, फ़ज़ी मिलान और पैच जनरेशन को एकल API में संभालती है; Google डॉक्स संशोधन इतिहास में उपयोग की जाती है। Diffchecker प्रमुख फ्रीमियम ऑनलाइन diff सेवा है, पूर्ण-विशेषताओं वाली लेकिन गोपनीयता पेवॉल्ड (मुफ्त स्तर उनके सर्वर पर पाठ भेजता है)। text-compare.com शुद्ध-पाठ वेब diff साइट में सबसे लंबे समय से चलने वाली है, पुरानी UI लेकिन कार्यात्मक।
गोपनीयता: क्यों केवल-ब्राउज़र यहाँ विशेष रूप से मायने रखता है
हर diff वास्तव में प्रकट करता है कि दो संस्करणों के बीच क्या बदल गया, और जो बदला वह अक्सर किसी भी संस्करण की तुलना में अधिक संवेदनशील होता है। तीन ठोस परिदृश्य जहां यह गंभीर रूप से मायने रखता है। सुरक्षा पैच: किसी फ़ंक्शन के असुरक्षित संस्करण की पैच किए गए संस्करण से diff करना सुरक्षा बग का सटीक स्थान और प्रकृति प्रकट करता है, एक हमलावर जो पैच पाता है, अनपैच्ड संस्करण के लिए एक एक्सप्लॉइट बना सकता है (Tian et al. द्वारा USENIX Security 2017 में प्रलेखित "patch gap" हमला)। सर्वर-साइड diff उपकरण में सुरक्षा पैच पेस्ट करना अनिवार्य रूप से भेद्यता को प्रकाशित कर रहा है। अनुबंध वार्ता: अनुबंध के दो संस्करणों की diff करना ठीक यह प्रकट करता है कि प्रत्येक पक्ष किन खंडों की परवाह करता है, जो ठीक वह जानकारी है जो आप नहीं चाहते कि बातचीत के दौरान दूसरे पक्ष (या नेटवर्क देखने वाले किसी भी व्यक्ति) के पास हो। प्रकाशन-पूर्व संपादकीय निर्णय: संपादन से पहले और बाद में पांडुलिपि की diff करना यह प्रकट करता है कि एक लेखक और संपादक ने क्या काटने या बदलने का निर्णय लिया, अक्सर अंतिम प्रकाशित संस्करण से अधिक प्रकट करता है। सर्वर-साइड diff उपकरण दोनों संस्करणों को तीसरे पक्ष को अपलोड करते हैं, जहां वे लॉग में बैठते हैं। यह उपकरण JavaScript के माध्यम से पूरी तरह से आपके ब्राउज़र में चलता है, Compare पर क्लिक करते समय DevTools के Network टैब में सत्यापित करें, या लोड होने के बाद पेज को ऑफ़लाइन (हवाई जहाज मोड) ले जाएं और उपकरण अभी भी काम करता है।
अक्सर पूछे जाने वाले प्रश्न
क्या मैं कोड फ़ाइलें तुलना कर सकता हूँ?
हाँ। कोड, JSON, HTML, Markdown या सादे टेक्स्ट सहित कोई भी टेक्स्ट पेस्ट करें। diff विशुद्ध रूप से टेक्स्ट आधारित है।
क्या यह व्हाइटस्पेस अंतर अनदेखा करता है?
केवल स्पेस या लाइन ब्रेक के अंतर को छोड़ने के लिए "व्हाइटस्पेस अनदेखा करें" विकल्प सक्षम करें।
यह किस एल्गोरिथम का उपयोग करता है?
Myers का O(ND) एल्गोरिथम (Eugene Myers, Algorithmica खंड 1 संख्या 2, 1986), वही एल्गोरिथम जिसका GNU diff दशकों तक डिफ़ॉल्ट रूप से उपयोग करता था और अधिकांश टेक्स्ट-diff कार्यान्वयन का आधार है। Myers ने सबसे लंबी-सामान्य-उप-अनुक्रम समस्या को एक संपादन ग्राफ़ पर सबसे छोटे-पथ खोज के रूप में फिर से तैयार किया, जिससे यह केवल कुछ स्थानों पर भिन्न इनपुट के लिए व्यवहार में तेज़ हो गया। नया हिस्टोग्राम एल्गोरिथम (Git का वर्तमान डिफ़ॉल्ट v2.11, नवंबर 2016 से) स्थानांतरित ब्लॉकों को थोड़ा बेहतर संभालता है लेकिन इस उपकरण द्वारा संभाले जाने वाले विशिष्ट दो-पेस्ट उपयोग के मामले के लिए अधिक है।
क्या कोई आकार सीमा है?
कोई कठोर सीमा नहीं, लेकिन तुलना JavaScript के माध्यम से आपके ब्राउज़र में चलती है, इसलिए व्यावहारिक छत आपके डिवाइस की उपलब्ध मेमोरी है। हजारों लाइनें आराम से काम करती हैं। बहुत बड़े इनपुट (मल्टी-मेगाबाइट लॉग फ़ाइलें, पूर्ण उपन्यास) चलेंगे लेकिन रेंडर करने में ध्यान देने योग्य सेकंड लग सकते हैं। वास्तव में विशाल इनपुट के लिए कमांड लाइन पर Git के diff का उपयोग करें, यह आउटपुट को स्ट्रीम करता है और मेमोरी दबाव के बिना मनमाने आकार की फ़ाइलों को संभालता है।
क्या यह तीन-तरफ़ा मर्ज कर सकता है या पैच लागू कर सकता है?
वर्तमान में नहीं, यह उपकरण दो-तरफ़ा तुलना (A बनाम B) पर केंद्रित है। तीन-तरफ़ा मर्ज (संघर्ष मार्करों <<<<<<< / ======= / >>>>>>> के साथ diff3 एल्गोरिथम) वह ऑपरेशन है जो Git शाखाओं को मर्ज करते समय उपयोग करता है; इसके लिए एक सामान्य पूर्वज प्लस दो भिन्न संस्करणों की आवश्यकता होती है। तीन-तरफ़ा मर्ज के लिए, एक वास्तविक संस्करण नियंत्रण प्रणाली या VS Code के तीन-फलक मर्ज संपादक (जून 2022 में 1.69 से डिफ़ॉल्ट-चालू) जैसे समर्पित उपकरण का उपयोग करें।
क्या मेरे टेक्स्ट अपलोड किए जाते हैं?
नहीं। तुलना JavaScript के माध्यम से पूरी तरह से आपके ब्राउज़र में चलती है। आपके द्वारा पेस्ट किए गए टेक्स्ट कभी नेटवर्क पार नहीं करते, Compare पर क्लिक करते समय DevTools के Network टैब में सत्यापित करें, या लोड होने के बाद पेज को ऑफ़लाइन (हवाई जहाज मोड) ले जाएं और उपकरण अभी भी काम करता है। सुरक्षा पैच (जहां diff स्वयं भेद्यता प्रकट करता है), अनुबंध संशोधन (जहां diff वार्ता पदों को प्रकट करता है), या प्रकाशन-पूर्व संपादकीय मसौदों को diff करने के लिए विशेष रूप से सुरक्षित।