§

Options

व्यू
ग्रैन्युलैरिटी
Preprocessing
§

Input

भारतीय इंजीनियरिंग टीमें दिन में दर्जनों बार diff सतह से टकराती हैं: GitHub और GitLab पर Git pull-request रिव्यू, Microsoft Word में अनुबंध रेडलाइन ट्रैकिंग, Google Docs में सहकर्मी समीक्षा वर्कफ्लो। CERT-In और MeitY की साइबर सुरक्षा दिशानिर्देशों के तहत काम करने वाले भारतीय सरकारी संस्थान अक्सर CUI वातावरण में परिवर्तन करने से पहले कॉन्फिगरेशन फ़ाइलें और एक्सेस-कंट्रोल सूचियाँ diff करने की ज़रूरत होती है, और उन snippets को किसी सार्वजनिक SaaS तुलना सेवा में पेस्ट करना आमतौर पर नीति उल्लंघन होता है। ब्राउज़र टैब में तुलना चलाना — कोई अपलोड नहीं, कोई खाता नहीं, कोई थर्ड-पार्टी लॉग नहीं — इंजीनियरों के लिए वर्कफ्लो तेज़ और डेटा-हैंडलिंग नीतियाँ लिखने वालों के लिए स्वीकार्य रखता है।

Diff एल्गोरिदम कैसे काम करते हैं

इस पेज पर हर diff व्यू Myers एल्गोरिदम द्वारा बनाया जाता है — Eugene W. Myers की 1986 की तकनीक जो O((N+M)D) समय में दो टोकन अनुक्रमों के बीच सबसे छोटी एडिट स्क्रिप्ट खोजती है, जहाँ D एडिट दूरी है। एल्गोरिदम Longest Common Subsequence समस्या पर बना है, और इंजन ओपन-सोर्स jsdiff लाइब्रेरी का उपयोग करके आपके ब्राउज़र में पूरी तरह चलता है।

  1. इनपुट टोकनाइज़ करें — तुलना करने से पहले, एल्गोरिदम प्रत्येक इनपुट को टोकन अनुक्रम में विभाजित करता है। लाइन ग्रैन्युलैरिटी नई पंक्तियों पर विभाजित करती है; शब्द ग्रैन्युलैरिटी व्हाइटस्पेस और विराम चिह्न सीमाओं पर; कैरेक्टर ग्रैन्युलैरिटी प्रत्येक Unicode कोड पॉइंट को अपना टोकन मानती है।
  2. एडिट ग्राफ बनाएँ — Myers एल्गोरिदम तुलना को 2D ग्रिड में पथ के रूप में मॉडल करता है जहाँ दाईं ओर जाने का मतलब "मूल से हटाएँ", नीचे जाने का मतलब "बदले से जोड़ें", और विकर्ण जाने का मतलब "दोनों में टोकन मिलता है"। एल्गोरिदम सबसे छोटा विकर्ण-भारी पथ खोजता है।
  3. LCS निकालें — सबसे छोटे पथ में विकर्ण चालें Longest Common Subsequence ट्रेस करती हैं — वे टोकन जो दोनों इनपुट में उसी सापेक्ष क्रम में दिखते हैं। LCS में हर टोकन "अपरिवर्तित" है; बाकी सब या तो जोड़ा गया है या हटाया गया है।
  4. प्रीप्रोसेसिंग विकल्प लागू करें — यदि आप "केस अनदेखा करें" सक्षम करते हैं, तो LCS पास से पहले दोनों इनपुट लोअरकेस किए जाते हैं ताकि "HELLO" और "hello" समान माने जाएँ। "व्हाइटस्पेस अनदेखा करें" कई स्पेस को एक में संकुचित करता है। "प्रत्येक लाइन ट्रिम करें" तुलना से पहले प्रति लाइन अगली-पिछली व्हाइटस्पेस हटाता है।
  5. चुना गया व्यू रेंडर करें — आउटपुट वही LCS परिणाम तीन तरीकों से दिखाया जाता है: साइड-बाय-साइड बाईं ओर मूल और दाईं ओर बदला हुआ दो-कॉलम ग्रिड में लाल और हरे रो हाइलाइट के साथ दिखाता है। यूनिफाइड एकल कॉलम में − और + उपसर्ग लाइनें दिखाता है, जैसे git diff का आउटपुट। इनलाइन वही टेक्स्ट प्रवाह में हटाई गई बातों को लाल स्ट्राइकथ्रू और जोड़ी गई बातों को हरे अंडरलाइन से दिखाता है।
  6. सारांश स्ट्रिप की गणना करें — रेंडरिंग के बाद, टूल गिनता है कितने टोकन जोड़े, हटाए और अपरिवर्तित रहे, फिर समानता की गणना अपरिवर्तित टोकन के दो इनपुट लंबाइयों में बड़े के अनुपात के रूप में करता है। 100% समानता का मतलब है प्रीप्रोसेसिंग के बाद इनपुट समान हैं।

Diff चेकर क्यों उपयोग करें

  • Git क्लाइंट के बिना कोड रिव्यू — कॉन्फिग फ़ाइल, SQL माइग्रेशन या शेल स्क्रिप्ट के दो संस्करण पेस्ट करें और देखें रेपो क्लोन किए, ब्रांच स्विच किए या CI पाइपलाइन का इंतजार किए बिना क्या बदला। यूनिफाइड व्यू आउटपुट बनाता है जिसे आप सीधे चैट थ्रेड या टिकट में कॉपी कर सकते हैं।
  • अनुबंध और दस्तावेज़ रेडलाइन — Word-स्तर diff दिखाता है कि अनुबंध मसौदों के बीच कौन से शब्द बदले, Word के Track Changes पैनल से तेज़। पहले मसौदे से धारा A और निष्पादित कॉपी से धारा B पेस्ट करें और प्रतिस्थापन ठीक उस वाक्यांश पर लाल-से-हरे रंग में जलता है जो बदला।
  • निबंध और मसौदा संशोधन — पहले मसौदे की संपादित संस्करण से तुलना करने वाले लेखक शब्द ग्रैन्युलैरिटी पर स्विच कर सकते हैं हर प्रतिस्थापन, सम्मिलन और कटौती बिना दोनों कॉपी पुनः पढ़े देखने के लिए। यही वर्कफ्लो अनुवादकों के लिए काम करता है जो स्रोत टेक्स्ट के खिलाफ परिवर्तनों की जाँच करते हैं।
  • लॉग और कॉन्फिग तुलना — दो सर्वर कॉन्फिग स्नैपशॉट, दो cron शेड्यूल, या दो ps aux आउटपुट की तुलना करने वाले सिसएडमिन लाइन ग्रैन्युलैरिटी का उपयोग करके 200-लाइन फ़ाइल में एकल बदले पैरामीटर को सेकंड में ढूंढ सकते हैं। Ignore-whitespace विकल्प के साथ जोड़ें और एक शोरगुल वाला अलाइनमेंट-ओनली diff उन पैरामीटर परिवर्तनों तक सिकुड़ जाता है जो वास्तव में मायने रखते हैं।

सामान्य अनुप्रयोग

टेक्स्ट diff लेखन, विकास और संचालन कार्य में हर संपादन चक्र के अंत में दिखता है।

  • Pull request रिव्यू: दो फंक्शन कार्यान्वयन साइड-बाय-साइड पेस्ट करें ब्रांच चेकआउट के ओवरहेड के बिना अनुमोदन से पहले लॉजिक परिवर्तन समझने के लिए।
  • Internationalisation QA: अंग्रेजी स्रोत स्ट्रिंग को अनुवादित समकक्ष से शब्द स्तर पर तुलना करें अनुवादक द्वारा शामिल किए गए सम्मिलन, चूक या शब्दावली स्वैप का पता लगाने के लिए।
  • घटना विश्लेषण: दो Kubernetes manifest स्नैपशॉट या दो "docker inspect" आउटपुट को लाइन स्तर पर diff करें उस कॉन्फिगरेशन परिवर्तन को अलग करने के लिए जो आउटेज से पहले हुआ।

एक व्यावहारिक उदाहरण

पाँच-लाइन सर्वर कॉन्फिग लें। मूल: host=localhost, port=5432, dbname=app_db, user=app, password=secret। बदला हुआ: host=db.prod.example.com, port=5432, dbname=app_db, user=app_prod, password=secret। लाइन ग्रैन्युलैरिटी और साइड-बाय-साइड व्यू के साथ, लाइन 1 बाईं ओर लाल (host=localhost) और दाईं ओर हरी (host=db.prod.example.com) दिखती है, लाइन 4 लाल (user=app) और हरी (user=app_prod) दिखती है, और लाइनें 2, 3 और 5 दोनों तरफ अपरिवर्तित रहती हैं। सारांश स्ट्रिप रिपोर्ट करती है 2 जोड़े गए, 2 हटाए गए, 3 अपरिवर्तित, और 60% समानता। शब्द ग्रैन्युलैरिटी पर स्विच करें और diff और तंग हो जाता है: केवल लाइन 1 और 4 पर = के दाईं ओर के मान जलते हैं, और समानता लगभग 85% तक बढ़ जाती है।

क्या यह मेरे ब्राउज़र में चलता है?

हाँ। पूरी diff गणना ओपन-सोर्स jsdiff लाइब्रेरी का उपयोग करके क्लाइंट-साइड चलती है। आप जो कुछ भी टाइप, पेस्ट या तुलना करते हैं वह किसी भी सर्वर को नहीं भेजा जाता। आप ब्राउज़र DevTools खोलकर, Network टैब पर स्विच करके, लॉग साफ़ करके, Compare क्लिक करके और यह पुष्टि करके इसे सत्यापित कर सकते हैं कि तुलना चरण के लिए शून्य नेटवर्क अनुरोध होते हैं।

समानता प्रतिशत का क्या मतलब है?

समानता की गणना अपरिवर्तित टोकन / अधिकतम (मूल में कुल टोकन, बदले में कुल टोकन) के रूप में होती है। 100% स्कोर का मतलब है दोनों इनपुट आपके प्रीप्रोसेसिंग विकल्पों के बाद समान हैं। 0% स्कोर का मतलब है इनपुट के बीच कोई टोकन साझा नहीं है। यह मेट्रिक एडिट दूरी का एक मोटा अनुमान है — त्वरित माप के रूप में उपयोगी — साहित्यिक चोरी या मौलिकता स्कोर नहीं।

क्या मैं JSON / YAML / XML को अर्थपूर्ण रूप से diff कर सकता हूँ?

इस टूल में नहीं। यह टेक्स्ट-स्तर diff है, इसलिए JSON या XML का केवल-व्हाइटस्पेस पुनः फॉर्मेटिंग अभी भी कई परिवर्तन दिखाता है भले ही डेटा तार्किक रूप से समान हो। सही अर्थपूर्ण diff के लिए, हम एक समर्पित JSON Diff टूल की योजना बना रहे हैं। अभी के लिए, पेस्ट करने से पहले दोनों इनपुट को समान इंडेंटेशन और की क्रम में सामान्य करें।

यूनिफाइड बनाम साइड-बाय-साइड व्यू में क्या अंतर है?

साइड-बाय-साइड दो कॉलम रेंडर करता है: बाईं ओर मूल और दाईं ओर बदला हुआ संस्करण, बाईं ओर लाल में हटाई गई लाइनें और दाईं ओर हरे में जोड़ी गई लाइनें हाइलाइट के साथ। यूनिफाइड एक कॉलम रेंडर करता है उपसर्ग और लाल पृष्ठभूमि हटाई गई लाइनों के लिए और + उपसर्ग और हरी पृष्ठभूमि जोड़ी गई लाइनों के लिए — वही लेआउट जो git diff आपके टर्मिनल पर प्रिंट करता है। यूनिफाइड का उपयोग तब करें जब आप परिणाम पैच फ़ाइल के रूप में कॉपी करना चाहते हैं। साइड-बाय-साइड का उपयोग तब करें जब क्या बदला यह दृश्य संरेखण अधिक मायने रखता है।

बाईं ओर मूल पेस्ट करें, दाईं ओर बदला हुआ संस्करण, एक व्यू और ग्रैन्युलैरिटी चुनें, और तुलना मिलीसेकंड में दिखती है। लाइव मोड चालू करें और diff हर कीस्ट्रोक पर पुनः चलता है। परिणाम मानक यूनिफाइड .patch फ़ाइल के रूप में डाउनलोड करें जिसे git apply सीधे उपयोग करता है। कोई अपलोड नहीं, कोई खाता नहीं, कोई वेंडर API key नहीं, कोई कोटा नहीं।