दो टेक्स्ट की तुलना करें
दोनों वर्शन पेस्ट करें और आमने-सामने ठीक-ठीक देखें कि क्या बदला, एक-एक शब्द तक। वही एल्गोरिदम जो git इस्तेमाल करता है — लाइन-दर-लाइन का ऐसा अंदाज़ा नहीं जो एक लाइन जोड़ते ही बिखर जाए।
- कभी स्टोर नहीं होती
- न कतार, न इंतज़ार
- साइनअप नहीं, वॉटरमार्क नहीं
यह कैसे काम करता है
दोनों वर्शन पेस्ट करें
ओरिजिनल बाईं ओर, नया दाईं ओर। या दो फ़ाइलें यहां छोड़ें।
अंतर पढ़ें
जोड़ी गई, हटाई गई और बदली गई लाइनों पर निशान लगता है, और बदली गई लाइन के अंदर ठीक वही शब्द हाइलाइट होते हैं।
जो मायने नहीं रखता, उसे नज़रअंदाज़ करें
कैपिटल/स्मॉल अक्षर, स्पेसिंग और ख़ाली लाइनें, हर एक को नज़रअंदाज़ किया जा सकता है — और अगर दो टेक्स्ट सिर्फ़ इसी वजह से मेल खाते हैं, तो पेज आपको बता देता है।
किसे एक जैसी लाइन माना जाता है
तुलना लाइन पर नहीं, एक की (key) पर होती है। चालू किए गए नज़रअंदाज़ वाले विकल्पों के हिसाब से हर लाइन को एक की में बदला जाता है, diff इन की पर चलता है, और आपको हमेशा आपका ओरिजिनल टेक्स्ट ही दिखाया जाता है — इसलिए “कैपिटल/स्मॉल अक्षरों को नज़रअंदाज़ करें” चालू करने से यह बदलता है कि कौन-सी लाइनें मेल खाती हैं, पर दिखने वाले टेक्स्ट का एक भी कैरेक्टर नहीं बदलता। स्पेस के दो अलग विकल्प हैं और वे अपने लेबल से ज़्यादा अलग हैं: एक लाइन के सिरे ट्रिम करता है, दूसरा पहले लगातार आने वाले स्पेस और टैब को एक स्पेस में समेटता है और फिर ट्रिम करता है। कोई भी व्हाइटस्पेस पूरी तरह नहीं हटाता, और समेटने वाला विकल्प सिर्फ़ सीधे स्पेस और टैब ढूंढता है, इसलिए लाइन के बीच का आइडियोग्राफ़िक स्पेस या नॉन-ब्रेकिंग स्पेस जस का तस रहता है और अंतर के रूप में गिना जाता है।
ख़ाली लाइनों को नज़रअंदाज़ करने वाले विकल्प का एक असर है जिसकी बात कोई नहीं करता: ख़ाली लाइनें तुलना चलने से पहले हटा दी जाती हैं, इसलिए नतीजे के बगल के लाइन नंबर सिर्फ़ बची हुई लाइनें गिनते हैं, और आपकी फ़ाइल के लाइन नंबरों से मेल खाना बंद कर देते हैं। विकल्प बंद हो, तो वे बिल्कुल मेल खाते हैं। बदली गई लाइन के अंदर शब्द-स्तर की हाइलाइटिंग सिर्फ़ कैपिटल/स्मॉल अक्षर वाली सेटिंग मानती है और कुछ नहीं — स्पेस वाले विकल्प वहां तक नहीं पहुंचते, इसलिए किसी और वजह से बदली गई लाइन के अंदर स्पेसिंग के अंतर भी बदलाव के रूप में रंगे जाते हैं।
कॉपी किया जाने वाला नतीजा पढ़ने के लिहाज़ से हर मायने में unified diff है — दोनों फ़ाइल हेडर, माइनस लाइनें, प्लस लाइनें, हर बदलाव के आसपास संदर्भ की तीन लाइनें — बस एक अपवाद के साथ जो उस पर भरोसा करने से पहले जानना ज़रूरी है। इसके हंक मार्कर में लाइन रेंज नहीं होती, इसलिए यह बग रिपोर्ट, कोड रिव्यू कमेंट या ईमेल के लिए बना है, और patch और git apply कमांड इसे मना कर देंगी। अगर आपको पढ़ने लायक नहीं बल्कि लागू करने लायक कुछ चाहिए, तो उसे git से बनाएं।
जब आपको कुछ और चाहिए
स्ट्रक्चर वाले फ़ॉर्मैट की लाइनों के रूप में तुलना ख़राब होती है, और यह गड़बड़ी छुपी नहीं, खुलकर दिखती है: दो JSON डॉक्यूमेंट जो सिर्फ़ अपनी की के क्रम में अलग हैं, या दो CSV जिनमें एक कॉलम खिसका है, बदलावों की ऐसी दीवार बनकर आते हैं जिससे कुछ पता नहीं चलता। इन्हें ऐसी चीज़ से diff करें जो उनकी बनावट समझती हो — दोनों JSON फ़ाइलों की की पहले सॉर्ट करके नतीजों की तुलना करें, या daff इस्तेमाल करें, जो CSV को पंक्तियों और कॉलम के रूप में diff करता है और बताएगा कि एक कॉलम खिसका, न कि हर लाइन बदल गई।
दो डायरेक्टरी, या किसी रिपॉज़िटरी के इतिहास के दो पड़ाव, इस पेज का नहीं, git का सवाल हैं। और जिस गद्य के पैराग्राफ़ दोबारा रैप किए गए हों, उसके लिए लाइन-आधारित नज़रिया ही ग़लत पैमाना है — git diff --word-diff इस बात को नज़रअंदाज़ करता है कि लाइन ब्रेक कहां पड़े, और सिर्फ़ वे शब्द दिखाता है जो खिसके, जो असल में वही तुलना है जो आप दोबारा फ़्लो किए गए डॉक्यूमेंट के लिए चाहते थे।
अक्सर पूछे जाने वाले सवाल
क्या मेरे डॉक्यूमेंट कहीं स्टोर होते हैं?
नहीं। कुछ भी स्टोर नहीं किया जाता और कोई रिक्वेस्ट नहीं भेजी जाती, और नेटवर्क बंद होने पर भी यह काम करता रहता है। टेक्स्ट के मामले में यह दिखने से ज़्यादा मायने रखता है: लोग ऑनलाइन टूल में जो पेस्ट करते हैं, वह अप्रकाशित लेखन, क़ानूनी ड्राफ़्ट, छात्रों का काम और अंदरूनी डॉक्यूमेंट होते हैं। किसी कॉन्ट्रैक्ट या ड्राफ़्ट के दो वर्शन की तुलना में तो पूरी बात ही यही है।
यह लाइन-दर-लाइन तुलना से बेहतर क्यों है?
क्योंकि लाइन-दर-लाइन चलने वाली तुलना कुछ भी खिसकते ही टूट जाती है। फ़ाइल में सबसे ऊपर एक लाइन जोड़ें, तो उसके नीचे की हर लाइन अब अलग पंक्ति पर है, इसलिए सीधी-सादी तुलना पूरे डॉक्यूमेंट को बदला हुआ बताती है — जो बेकार है। यह Myers एल्गोरिदम इस्तेमाल करता है, जो git diff और diff(1) के पीछे है, और जो जोड़ने-हटाने का सबसे छोटा ऐसा सेट ढूंढता है जो एक टेक्स्ट को दूसरे में बदल दे। सबसे ऊपर एक लाइन जोड़ें, तो यह एक जोड़ी गई लाइन बताता है।
क्या यह सिर्फ़ लाइनें नहीं, बदले हुए शब्द भी दिखा सकता है?
हां। जब कोई लाइन जोड़ी या हटाई जाने के बजाय एडिट की गई हो, तो उसकी शब्द-दर-शब्द दोबारा तुलना होती है और सिर्फ़ वही शब्द हाइलाइट होते हैं जो असल में बदले। किसी लंबे पैराग्राफ़ में जहां किसी ने तीन शब्द बदले, वहां आपको तीन शब्द दिखते हैं, रंगों की दीवार नहीं।
“नज़रअंदाज़” वाले विकल्प क्या करते हैं?
वे बदलते हैं कि किसे एक जैसी लाइन माना जाए। कैपिटल/स्मॉल अक्षर, स्पेसिंग या ख़ाली लाइनों को नज़रअंदाज़ करना दोबारा फ़ॉर्मैट किए गए कोड या फिर से पेस्ट किए टेक्स्ट की तुलना में काम आता है। एक ज़रूरी बात: अगर दो टेक्स्ट सिर्फ़ किसी चीज़ को नज़रअंदाज़ करने की वजह से मेल खाते हैं, तो पेज उन्हें एक जैसा बताने के बजाय साफ़-साफ़ यही कहता है — “एक जैसे” और “केस नज़रअंदाज़ करें तो एक जैसे” अलग-अलग तथ्य हैं, और इन्हें मिलाकर ही कोई ऐसी फ़ाइल भेज देता है जिसे वह बिना बदली समझ रहा था।
क्या मुझे नतीजा पैच के रूप में मिल सकता है?
हां — तुलना को unified diff के रूप में कॉपी किया जा सकता है, वही फ़ॉर्मैट जो git और ईमेल पैच इस्तेमाल करते हैं, हर बदलाव के आसपास कुछ लाइनों के संदर्भ के साथ। बग रिपोर्ट में पेस्ट करने के लिए यही फ़ॉर्मैट है।
क्या कोई साइज़ सीमा है?
कोई तय साइज़ सीमा नहीं, उपलब्ध मेमोरी ही सीमा है। दो लंबे डॉक्यूमेंट की तुलना तेज़ है, क्योंकि असली काम शुरू होने से पहले एक जैसी शुरुआत और अंत को मिलाकर छोड़ दिया जाता है। जो दो टेक्स्ट हज़ारों अलग-अलग जगहों पर अलग हैं, उन्हें टैब फ़्रीज़ करने के बजाय वजह बताकर मना कर दिया जाता है — इतना बड़ा diff वैसे भी पढ़ने लायक नहीं होता।
क्या यह Word या PDF फ़ाइलों की तुलना कर सकता है?
सीधे नहीं। पहले उन्हें टेक्स्ट में बदलें — हमारे [PDF को टेक्स्ट में बदलें](pdf-to-text) और [DOCX को TXT में बदलें](docx-to-txt) टूल ठीक यही करते हैं — और नतीजे यहां पेस्ट करें।
ध्यान दें: तुलना 8,000 अंतरों तक सीमित है। उसके बाद एल्गोरिदम की लागत इतनी तेज़ी से बढ़ती है कि टैब फ़्रीज़ हो सकता है, इसलिए पेज अटकने के बजाय रुककर यह बता देता है — दो बिल्कुल अलग डॉक्यूमेंट जल्दी ही इस सीमा पर पहुंच जाते हैं। एक ही फ़ाइल के दो वर्शन की तुलना में लगभग कभी ऐसा नहीं होता।
यह टूल अपनी वेबसाइट पर लगाएं
किसी भी ब्लॉग, क्लास पेज या हेल्प आर्टिकल के लिए मुफ़्त। एक स्निपेट पेस्ट करें और आपके विज़िटर इसे सीधे आपके पेज पर इस्तेमाल कर सकेंगे।
मिलते-जुलते टूल्स
शब्द गिनें (वर्ड काउंटर)
शब्द, वाक्य और पढ़ने का समय
डुप्लिकेट लाइनें हटाएं
दोहराव हटाएं, सूची को सॉर्ट करें और साफ़ करें
JSON फ़ॉर्मैटर
उलझे JSON को पढ़ने लायक बनाएं
अक्षर गिनें (कैरेक्टर काउंटर)
कैरेक्टर, बाइट, और आपकी लिमिट असल में क्या गिनती है
केस कन्वर्टर
UPPER, lower, Title Case, camelCase और बाक़ी सब
HTML मिनिफ़ाई करें
पेज बिगाड़े बिना HTML छोटा करें