Diff Checker

Diff Checker

दो टेक्स्ट या कोड के टुकड़ों की तुलना करें — लाइन और शब्द-स्तर हाइलाइटिंग के साथ। साइड-बाय-साइड या unified, ignore-whitespace, ignore-case — पूरी तरह आपके ब्राउज़र में।

नहीं। पूरा टूल JavaScript है जो इसी पेज के अंदर चलता है। diff एल्गोरिदम (longest-common-subsequence) आपके CPU पर चलता है और परिणाम सीधे DOM में रेंडर होता है। DevTools → Network खोलकर देखें — diffing के दौरान कोई रिक्वेस्ट नहीं जाती। आंतरिक कोड, ग्राहक डेटा, अनुबंध ड्राफ्ट, या कुछ भी पेस्ट करना सुरक्षित है जिसे आप किसी सर्वर टूल पर लॉग नहीं करवाना चाहते।

पहले हम दोनों इनपुट को लाइनों में विभाजित करते हैं और LCS (longest common subsequence) एल्गोरिदम चलाते हैं। जो लाइनें दोनों तरफ मेल खाती हैं उन्हें equal के रूप में चिह्नित किया जाता है। जो मेल नहीं खातीं, उन्हें 'change' पंक्तियों में जोड़ा जाता है जब एक addition, deletion के पास दिखाई देती है। हर जोड़ीदार बदलाव के लिए, हम लाइन के शब्दों पर (व्हाइटस्पेस से विभाजित) एक दूसरा LCS चलाते हैं ताकि केवल वास्तव में बदले गए शब्द ही लाल/हरे रंग में दिखें — पूरी लाइन नहीं।

iKit Diff Checker क्यों चुनें

एक साफ-सुथरा, तेज़ टेक्स्ट diff प्लेग्राउंड — बिना विज्ञापन, पॉपअप या तृतीय-पक्ष ट्रैकर के — डेवलपर्स, लेखकों, और किसी भी ऐसे व्यक्ति के लिए जिसे यह जानना हो कि क्या बदला है।

साइड-बाय-साइड + unified व्यू

split (दो कॉलम, क्लासिक IDE जैसा एहसास) और unified (एक कॉलम, +/− मार्कर के साथ) के बीच एक क्लिक से स्विच करें। दोनों व्यू लाइन नंबर दिखाते हैं और हर बदलाव को इनलाइन हाइलाइट करते हैं।

शब्द-स्तर हाइलाइटिंग

जब दो लाइनें बदलती हैं, हम शब्द-स्तर पर एक दूसरा diff चलाते हैं ताकि केवल असली अंतर ही चमकें — पूरी लाइन नहीं। 200-अक्षर वाली लाइन में एक टाइपो ढूँढना आसान।

Ignore-whitespace + ignore-case

व्हाइटस्पेस और केस संवेदनशीलता को टॉगल करके कॉस्मेटिक बदलावों (री-फ़ॉर्मेट किया गया इंडेंटेशन, कैपिटलाइज़ेशन में बदलाव) को फ़िल्टर करें और असली बदलावों पर ध्यान दें।

डिज़ाइन से प्राइवेसी

दोनों टेक्स्ट आपके ब्राउज़र टैब में ही रहते हैं। diff एल्गोरिदम स्थानीय रूप से JavaScript में चलता है। DevTools → Network में सत्यापन योग्य: टाइप करते समय शून्य रिक्वेस्ट जाते हैं।

आँकड़े + कॉपी

एक नज़र में देखें कितनी लाइनें जोड़ी, हटाई और संशोधित की गईं। एक क्लिक में diff को क्लिपबोर्ड पर कॉपी करें — कोड रिव्यू या कमिट संदेश में पेस्ट करने के लिए।

ऑफ़लाइन काम करता है

पेज लोड होने के बाद, हर बाइट स्थानीय रूप से कंप्यूट होता है। हवाई जहाज़ में, कॉर्पोरेट फ़ायरवॉल के पीछे, या बिना नेटवर्क के भी काम करता है — गोपनीय कोड रिव्यू के लिए उपयोगी।

diff checker वास्तव में कैसे काम करता है

इसके पीछे का गणित वेब से भी पुराना है — 1965 का LCS नामक एल्गोरिदम, और 1986 में Eugene Myers का परिशोधन।

  1. 1

    लाइनों में विभाजित करें

    दोनों इनपुट \n (या \r\n) पर तोड़े जाते हैं। हर लाइन एक टोकन बन जाती है। हम टोकन की तुलना करते हैं — अक्षरों की नहीं — क्योंकि वास्तविक कोड या दस्तावेज़ों में अधिकांश संपादन पूरी लाइनें जोड़ते, हटाते या संशोधित करते हैं।

  2. 2

    LCS की गणना करें

    Longest Common Subsequence उन लाइनों का सबसे बड़ा सेट है जो दोनों इनपुट में एक ही क्रम में दिखाई देती हैं। हम नीचे-दाईं ओर से चलते हुए एक DP तालिका भरते हैं; प्रत्येक सेल उस स्थान से अंत तक की LCS लंबाई रखता है। इसमें O(m × n) समय और मेमोरी लगती है।

  3. 3

    ऑपरेशन निकालने के लिए वापस चलें

    तालिका के ऊपर-बाएँ कोने से शुरू करते हुए, हम आगे चलते हैं: यदि दो वर्तमान लाइनें मेल खाती हैं, तो equal आउटपुट करें; अन्यथा जो भी दिशा (दाएँ या नीचे) LCS लंबाई बनाए रखे उसे चुनें, delete या insert आउटपुट करते हुए। परिणाम ऑपरेशनों का एक क्रम है जो मूल को संशोधित में बदल देता है।

  4. 4

    बदले गए जोड़ों के अंदर शब्द-स्तर diff

    जब किसी delete के बाद insert आता है, हम उन्हें change पंक्ति के रूप में जोड़ते हैं। लाइन के अंदर केवल भिन्न भागों को हाइलाइट करने के लिए, हम वही LCS एल्गोरिदम दूसरी बार प्रत्येक तरफ के शब्दों पर चलाते हैं, व्हाइटस्पेस सीमाओं पर विभाजित करते हुए।

सामान्य diff कार्य

वास्तविक स्थितियाँ जहाँ आप diff checker का उपयोग करेंगे।

टिप्पणी से पहले PR की समीक्षा

GitHub का diff व्यू बहुत अच्छा है, लेकिन कभी-कभी आप केवल सारगर्भित बदलाव देखना चाहते हैं — फ़ॉर्मेटर शोर के बिना। दोनों संस्करण पेस्ट करें, Ignore whitespace टॉगल करें, और कॉस्मेटिक री-फ़ॉर्मेट गायब हो जाते हैं — केवल लॉजिक संपादन छोड़ते हुए।

दो अनुबंध ड्राफ्ट की तुलना

वकीलों और ऑप्स टीमों को अक्सर अनुबंध के v1 और v2 के बीच क्या बदला है यह जानना होता है। दोनों पेस्ट करें, शब्द-स्तर हाइलाइटिंग के साथ रंगीन diff पाएँ — कोई Word नहीं, कोई Track Changes नहीं, गोपनीय शर्तों का किसी तृतीय-पक्ष सर्वर पर अपलोड नहीं।

जाँचें कि किसी स्क्रिप्ट एडिट ने वास्तव में क्या किया

किसी कॉन्फ़िग फ़ाइल पर sed/awk/Python regex चलाया? मूल और परिणाम यहाँ पेस्ट करें ताकि पुष्टि हो कि स्क्रिप्ट ने केवल वही संपादित किया जो आपने अपेक्षा की थी। अक्षर-स्तर हाइलाइट उन भटकते हुए संपादनों को पकड़ता है जिन्हें त्वरित दृश्य स्कैन से चूक जाते हैं।

अनुवादित टेक्स्ट में टाइपो खोजना

अनुवाद जोड़ी (स्रोत बनाम अनुवाद, या एक ही स्रोत के दो अनुवाद) — शब्द-स्तर diff से एक छूटा हुआ शब्द, दोहराया गया वाक्यांश, या प्रूफ़रीडर्स से छूट गया विराम-चिह्न उलटाव खोजना बेहद आसान हो जाता है।

स्थानीय diffing क्यों मायने रखती है

जो टेक्स्ट आप तुलना करते हैं वे आमतौर पर निजी होते हैं: आंतरिक रिपॉज़िटरी का कोड, अनुबंध ड्राफ्ट, ग्राहक-डेटा एक्सपोर्ट, या अनरिलीज़्ड प्रोडक्ट कॉपी। उन्हें किसी अजनबी के सर्वर पर पेस्ट करने से एक पेपर ट्रेल बनती है जिस पर आपका नियंत्रण नहीं। iKit का diff checker पहले से आपके ब्राउज़र टैब में लोड किया गया JavaScript है — तुलना आपके CPU पर चलती है और कभी किसी नेटवर्क सॉकेट को नहीं छूती।

  • diffing के दौरान शून्य नेटवर्क रिक्वेस्ट — DevTools → Network में सत्यापन योग्य।
  • इनपुट ब्राउज़र मेमोरी में रहते हैं; Clear या पेज रिफ्रेश पर साफ़ हो जाते हैं।
  • आंतरिक कोड, NDA-संरक्षित दस्तावेज़, ग्राहक सहायता ट्रांसक्रिप्ट, और डेटा-निवास नीतियों के अंतर्गत आने वाली किसी भी चीज़ के लिए सुरक्षित।

Related guides

Deep-dive tutorials and tool comparisons from the iKit blog.

अक्सर पूछे जाने वाले प्रश्न

क्या यह सुरक्षित है? क्या मेरे टेक्स्ट अपलोड होते हैं?

नहीं। पूरा टूल JavaScript है जो इसी पेज के अंदर चलता है। diff एल्गोरिदम (longest-common-subsequence) आपके CPU पर चलता है और परिणाम सीधे DOM में रेंडर होता है। DevTools → Network खोलकर देखें — diffing के दौरान कोई रिक्वेस्ट नहीं जाती। आंतरिक कोड, ग्राहक डेटा, अनुबंध ड्राफ्ट, या कुछ भी पेस्ट करना सुरक्षित है जिसे आप किसी सर्वर टूल पर लॉग नहीं करवाना चाहते।

लाइन + शब्द-स्तर हाइलाइटिंग कैसे काम करती है?

पहले हम दोनों इनपुट को लाइनों में विभाजित करते हैं और LCS (longest common subsequence) एल्गोरिदम चलाते हैं। जो लाइनें दोनों तरफ मेल खाती हैं उन्हें equal के रूप में चिह्नित किया जाता है। जो मेल नहीं खातीं, उन्हें 'change' पंक्तियों में जोड़ा जाता है जब एक addition, deletion के पास दिखाई देती है। हर जोड़ीदार बदलाव के लिए, हम लाइन के शब्दों पर (व्हाइटस्पेस से विभाजित) एक दूसरा LCS चलाते हैं ताकि केवल वास्तव में बदले गए शब्द ही लाल/हरे रंग में दिखें — पूरी लाइन नहीं।

Split और Unified व्यू में क्या अंतर है?

Split व्यू दोनों टेक्स्ट को साथ-साथ दिखाता है, जोड़ीदार लाइन नंबरों के साथ — IDE (VS Code, JetBrains) में diff जैसा दिखता है। Unified व्यू एक कॉलम दिखाता है, +/− प्रीफ़िक्स लाइनों के साथ — `git diff` जो प्रिंट करता है उसके करीब। जो आपके वर्कफ़्लो से मेल खाए वही चुनें; दोनों एक ही डेटा रेंडर करते हैं।

'ignore whitespace' क्यों मदद करता है?

कोड को री-फ़ॉर्मेट करना (Prettier चलाना, tab/space बदलना, लाइन एंडिंग्स सामान्य करना) दृश्य शोर जोड़ता है जो असली बदलावों को छुपा देता है। 'Ignore whitespace' टॉगल करने से spaces/tabs के समूह एक स्पेस में मिल जाते हैं और diff से पहले लाइन के किनारे ट्रिम हो जाते हैं — इसलिए आपको केवल सार्थक बदलाव दिखते हैं, कॉस्मेटिक नहीं।

ब्राउज़र में मैं अधिकतम कितना बड़ा इनपुट diff कर सकता हूँ?

LCS एल्गोरिदम O(m × n) मेमोरी का उपयोग करता है जहाँ m और n दोनों तरफ की लाइन गिनती हैं। iKit तुलना को ~4 मिलियन सेल (≈16 MB) पर सीमित करता है, जो कुछ हज़ार लाइनों बनाम कुछ हज़ार लाइनों को आराम से संभालता है। बड़े diffs (पूरे डेटाबेस डंप, फुल-फ़ाइल लॉग) के लिए `diff` या `git diff --no-index` जैसे CLI टूल का उपयोग करें — वे एक स्मार्ट एल्गोरिदम (Myers diff) का उपयोग करते हैं जो लाखों लाइनों तक स्केल करता है।