डिफ़ चेकर
दो टेक्स्ट पेस्ट करें और अंतर हाइलाइट होते देखें।
अंतर
- मूल टेक्स्ट को "टेक्स्ट A" में पेस्ट करें।
- बदला हुआ संस्करण "टेक्स्ट B" में पेस्ट करें।
- कोड/कॉन्फ़िग के लिए "पंक्तियाँ", गद्य के लिए "शब्द" चुनें।
- अदृश्य बदलाव शोर पैदा कर रहे हों तो "व्हाइटस्पेस नज़रअंदाज़" या "केस नज़रअंदाज़" चालू करें।
- नीचे दिए हाइलाइट किए गए आउटपुट को पढ़ें — हरा जोड़ा गया है, लाल हटाया गया है।
यह क्या करता है?
डिफ़ चेकर दो टेक्स्ट की तुलना करता है और बिल्कुल दिखाता है कि क्या जोड़ा गया, हटाया गया या जैसा था वैसा रहा। "पंक्तियाँ" मोड हर पंक्ति को एक इकाई मानता है — स्रोत कोड और कॉन्फ़िग के लिए उपयुक्त, जहाँ आमतौर पर पूरी पंक्ति बदलती है। "शब्द" मोड व्हाइटस्पेस पर विभाजित करता है और गद्य के लिए बेहतर है।
उदाहरण
टेक्स्ट A:
function greet(name) {
console.log("Hello, " + name);
} टेक्स्ट B:
function greet(name) {
if (!name) name = "world";
console.log(`Hello, ${name}!`);
} पंक्ति मोड में अंतर:
function greet(name) {
+ if (!name) name = "world";
- console.log("Hello, " + name);
+ console.log(`Hello, ${name}!`);
} सामान्य त्रुटियाँ और सावधानियाँ
जब दो पंक्तियाँ एक जैसी दिखती हैं पर डिफ़ फिर भी उन्हें बदला हुआ दिखाता है, तो कारण लगभग हमेशा कोई अदृश्य वर्ण या केस का अंतर होता है। आम संदिग्ध ये हैं।
- CRLF बनाम LF लाइन एंडिंग। Windows फ़ाइलें पंक्ति अंत में \r\n लगाती हैं, Unix \n। एक वर्ण का भी अंतर हर पंक्ति को चिह्नित कर देता है। "व्हाइटस्पेस नज़रअंदाज़" चालू करें, या dos2unix / एडिटर सेटिंग से सामान्य करें।
- पंक्ति अंत के स्पेस। जब तक व्हाइटस्पेस नज़रअंदाज़ न हो, "foo " और "foo" अलग दिखेंगे। सेव करते समय पंक्ति-अंत स्पेस हटाने की सेटिंग से हर छुई गई पंक्ति बदली हुई लगेगी।
- टैब बनाम स्पेस। टैब को स्पेस में (या इसके विपरीत) बदलने वाली रीफ़ॉर्मेटिंग हर इंडेंटेड पंक्ति को सख्त-मैच मोड में अलग दिखाती है। "व्हाइटस्पेस नज़रअंदाज़" चालू करें या पहले दोनों पक्षों को समान रूप से फ़ॉर्मेट करें।
- बाइट-ऑर्डर मार्क (BOM)। UTF-8 with BOM के रूप में सहेजी गई फ़ाइलें अदृश्य से शुरू होती हैं। बिना-BOM फ़ाइल से तुलना पर पहली "पंक्ति" हमेशा बदली हुई दिखती है। पेस्ट करने से पहले एडिटर या हेक्स एडिटर में BOM हटा दें।
- स्मार्ट उद्धरण या ग़ैर-ब्रेकिंग स्पेस। वर्ड प्रोसेसर से पेस्ट करने पर " के बदले " और सामान्य स्पेस की जगह ग़ैर-ब्रेकिंग स्पेस आ सकता है। दिखने में एक जैसे, पर कोड-पॉइंट अलग। तुलना से पहले सादे ASCII में सामान्य करें।
- केवल केस-अंतर। API और api अलग स्ट्रिंग हैं, जब तक "केस नज़रअंदाज़" चालू न हो। इसे चालू करने पर केवल तुलना ढीली होती है; दिखाया गया टेक्स्ट मूल रहता है।
अक्सर पूछे जाने वाले प्रश्न
पंक्ति और शब्द मोड में क्या अंतर है?
पंक्ति मोड एक बार में एक पंक्ति की तुलना करता है — पंक्ति में किसी भी वर्ण का बदलाव पूरी पंक्ति को A से हटाया और B में जोड़ा गया चिह्नित कर देता है। शब्द मोड व्हाइटस्पेस पर विभाजित करता है और अधिक सूक्ष्म डिफ़ देता है, जो गद्य के लिए बेहतर है। स्रोत कोड और कॉन्फ़िग के लिए लगभग हमेशा पंक्ति मोड ही सही रहता है।
एक जैसी दिखने वाली पंक्तियाँ बदली हुई क्यों दिखती हैं?
आम तौर पर तीन अदृश्य अंतरों में से एक: लाइन एंडिंग (Windows का CRLF बनाम Unix का LF), पंक्ति अंत के स्पेस, या फ़ाइल के शुरू में बाइट-ऑर्डर मार्क (BOM)। "व्हाइटस्पेस नज़रअंदाज़" चालू करने से पहले दो छूट जाते हैं। BOM के लिए, पेस्ट करने से पहले एडिटर या हेक्स एडिटर में उसे हटा दें।
क्या यह वर्ण-दर-वर्ण डिफ़ करता है?
नहीं। पंक्ति मोड में प्रति पंक्ति, शब्द मोड में व्हाइटस्पेस-विभाजित टोकन प्रति डिफ़ करता है। वर्ण-स्तरीय डिफ़ अधिकांश वास्तविक टेक्स्ट के लिए शोरभरा आउटपुट देता है। छोटी स्ट्रिंग्स के लिए वर्ण-स्तरीय चाहिए तो उन्हें शब्द मोड में पेस्ट करें — स्पेस न होने पर हर वर्ण प्रभावी रूप से अपना टोकन बन जाता है।
इनपुट कितने बड़े हो सकते हैं?
डिफ़ मेमोरी में चलता है, इसलिए व्यावहारिक सीमा आपके ब्राउज़र की RAM है। प्रति पक्ष कुछ MB तक ठीक है; दसियों MB पर टैब थोड़ी देर अटक सकता है क्योंकि हाइलाइटेड HTML रेंडर करना डिफ़ से धीमा होता है। बहुत बड़ी फ़ाइलों के लिए GNU diff या git diff लोकल पर चलाएँ।
क्या केस या व्हाइटस्पेस नज़रअंदाज़ कर सकते हैं?
हाँ — टूलबार में दोनों टॉगल हैं। "व्हाइटस्पेस नज़रअंदाज़" किसी भी लगातार व्हाइटस्पेस को समतुल्य मानता है, जो रीफ़ॉर्मेट किए कोड के लिए उपयोगी है। "केस नज़रअंदाज़" "Hello" और "hello" को समान मानता है। दिखाया गया टेक्स्ट मूल रहता है; केवल तुलना ढीली होती है।
क्या आप दो बक्सों में पेस्ट किए गए टेक्स्ट को सहेजते हैं?
नहीं। आप यहाँ जो पेस्ट करते हैं — "पहले" का हो या "बाद" का — हम नहीं रखते। पेज बंद या रिफ्रेश होते ही जो तुलना की गई थी वह हट जाती है। न लॉग, न आपके कंटेंट पर एनालिटिक्स। अतिरिक्त आश्वासन चाहिए तो अपने ब्राउज़र के डेवलपर टूल्स में देख सकते हैं।