دو ٹیکسٹ یا کوڈ کے ٹکڑوں کا لائن اور لفظ کی سطح پر نمایاں کرنے کے ساتھ موازنہ کریں۔ ساتھ ساتھ یا یکجا، خالی جگہ نظر انداز کریں، حروف کی حالت نظر انداز کریں — مکمل طور پر آپ کے براؤزر میں۔
نہیں۔ پورا ٹول JavaScript ہے جو اس صفحے کے اندر چلتا ہے۔ diff الگورتھم (longest-common-subsequence) آپ کے CPU پر چلتا ہے اور نتیجہ براہ راست DOM میں پیش کیا جاتا ہے۔ DevTools → Network کھولیں اور دیکھیں — diffing کے دوران کوئی درخواست نہیں جاتی۔ اندرونی کوڈ، صارف کا ڈیٹا، معاہدے کے مسودے، یا کوئی بھی چیز جسے آپ سرور ٹول پر لاگ نہیں کرنا چاہتے، چسپاں کرنا محفوظ ہے۔
پہلے ہم دونوں ان پٹس کو لائنوں میں تقسیم کرتے ہیں اور LCS (longest common subsequence) الگورتھم چلاتے ہیں۔ جو لائنیں دونوں طرف میل کھاتی ہیں انہیں برابر نشان زد کیا جاتا ہے۔ جو لائنیں میل نہیں کھاتیں ان کو 'تبدیلی' قطاروں میں جوڑا جاتا ہے جب اضافہ حذف کے ساتھ ظاہر ہوتا ہے۔ ہر جوڑی شدہ تبدیلی کے لیے، ہم لائن کے الفاظ پر دوسرا LCS چلاتے ہیں (خالی جگہ سے تقسیم کیا گیا) تاکہ صرف اصل ترمیم شدہ الفاظ سرخ/سبز روشن ہوں — نہ کہ پوری لائن۔
iKit Diff چیکر کیوں
ایک صاف، تیز ٹیکسٹ diff پلے گراؤنڈ بغیر اشتہارات، پاپ اپ، یا تیسرے فریق کے ٹریکرز کے — ڈویلپرز، لکھاریوں، اور ہر اس شخص کے لیے بنایا گیا جسے یہ دیکھنا ہو کہ کیا تبدیل ہوا۔
ساتھ ساتھ + یکجا نظارے
ایک کلک سے تقسیم (دو کالم، کلاسیکی IDE احساس) اور یکجا (واحد کالم +/− نشانات کے ساتھ) کے درمیان سوئچ کریں۔ دونوں نظارے لائن نمبر دکھاتے ہیں اور ہر تبدیلی کو ان لائن نمایاں کرتے ہیں۔
لفظ کی سطح پر نمایاں کرنا
جب دو لائنیں تبدیل ہوتی ہیں، ہم ایک دوسرا لفظ کی سطح کا diff چلاتے ہیں تاکہ صرف اصل اختلافات چمکیں — نہ کہ پوری لائن۔ 200 حروف کی لائن میں ایک واحد ٹائپو تلاش کرنا آسان ہے۔
خالی جگہ + حروف کی حالت نظر انداز کریں
ظاہری تبدیلیوں (دوبارہ فارمیٹ شدہ انڈینٹیشن، بڑے چھوٹے حروف کی ترمیم) کو فلٹر کرنے اور حقیقی ترمیم پر توجہ مرکوز کرنے کے لیے خالی جگہ اور حروف کی حساسیت کو ٹوگل کریں۔
ڈیزائن کے ذریعے رازداری
دونوں ٹیکسٹ آپ کے براؤزر ٹیب میں رہتے ہیں۔ diff الگورتھم مقامی طور پر JavaScript میں چلتا ہے۔ DevTools → Network میں قابل تصدیق: ٹائپ کرتے وقت کوئی درخواست نہیں جاتی۔
اعداد و شمار + کاپی
ایک نظر میں دیکھیں کہ کتنی لائنیں شامل، ہٹائی، اور ترمیم کی گئیں۔ ایک کلک diff کو آپ کے کلپ بورڈ پر کاپی کرتا ہے تاکہ کوڈ ریویو یا کمٹ پیغام میں چسپاں کیا جا سکے۔
آف لائن کام کرتا ہے
صفحہ لوڈ ہونے کے بعد، ہر بائٹ مقامی طور پر شمار ہوتا ہے۔ ہوائی جہاز پر، کارپوریٹ فائر وال کے پیچھے، یا بغیر نیٹ ورک کے کام کرتا ہے — رازدارانہ کوڈ ریویو کے لیے مفید۔
diff چیکر دراصل کیسے کام کرتا ہے
ہڈ کے نیچے کی ریاضی ویب سے بھی پرانی ہے — 1965 کا ایک الگورتھم جسے LCS کہا جاتا ہے، اور Eugene Myers کی 1986 کی ایک تطہیر۔
1
لائنوں میں تقسیم کریں
دونوں ان پٹس \n (یا \r\n) پر توڑے جاتے ہیں۔ ہر لائن ایک ٹوکن بن جاتی ہے۔ ہم ٹوکن کا موازنہ کرتے ہیں — حروف کا نہیں — کیونکہ حقیقی دنیا کے کوڈ یا دستاویزات میں زیادہ تر ترامیم پوری لائنوں کو شامل، ہٹاتی، یا ترمیم کرتی ہیں۔
2
LCS کا حساب لگائیں
Longest Common Subsequence لائنوں کا سب سے بڑا مجموعہ ہے جو دونوں ان پٹس میں ایک ہی ترتیب میں ظاہر ہوتا ہے۔ ہم نیچے دائیں سے چلتے ہوئے ایک DP ٹیبل بھرتے ہیں؛ ہر خانہ اس مقام سے آخر تک LCS کی لمبائی رکھتا ہے۔ یہ O(m × n) وقت اور میموری لیتا ہے۔
3
آپریشنز اخذ کرنے کے لیے واپس چلیں
ٹیبل کے اوپری بائیں سے شروع کرتے ہوئے، ہم آگے چلتے ہیں: اگر دونوں موجودہ لائنیں میل کھاتی ہیں، تو برابر آؤٹ پٹ کریں؛ ورنہ جو بھی سمت (دائیں یا نیچے) LCS کی لمبائی کو محفوظ رکھے اسے منتخب کریں، حذف یا اندراج آؤٹ پٹ کرتے ہوئے۔ نتیجہ آپریشنز کا ایک سلسلہ ہے جو اصل کو ترمیم شدہ میں تبدیل کرتا ہے۔
4
تبدیل شدہ جوڑوں کے اندر لفظ کی سطح کا diff
جب حذف کے بعد اندراج آتا ہے، تو ہم انہیں تبدیلی قطار کے طور پر جوڑتے ہیں۔ صرف ان حصوں کو نمایاں کرنے کے لیے جو لائن کے اندر مختلف ہیں، ہم ہر طرف کے الفاظ پر وہی LCS الگورتھم دوسری بار چلاتے ہیں، خالی جگہ کی حدود پر تقسیم کرتے ہوئے۔
عام diff کام
حقیقی حالات جہاں آپ diff چیکر کے لیے ہاتھ بڑھائیں گے۔
تبصرہ کرنے سے پہلے PR کا جائزہ لینا
GitHub کا diff نظارہ بہت اچھا ہے، لیکن کبھی کبھی آپ صرف اہم تبدیلیاں دیکھنا چاہتے ہیں بغیر فارمیٹر کے شور کے۔ دونوں ورژن چسپاں کریں، خالی جگہ نظر انداز کرنے کو ٹوگل کریں، اور ظاہری دوبارہ فارمیٹ غائب ہو جاتے ہیں — صرف منطقی ترامیم رہ جاتی ہیں۔
دو معاہدے کے مسودوں کا موازنہ
وکلاء اور آپریشن ٹیموں کو اکثر یہ جاننے کی ضرورت ہوتی ہے کہ معاہدے کے v1 اور v2 کے درمیان کیا تبدیل ہوا۔ دونوں چسپاں کریں، لفظ کی سطح کی نمایاں کاری کے ساتھ رنگین diff حاصل کریں — کوئی Word نہیں، کوئی Track Changes نہیں، رازدارانہ شرائط کا کسی تیسرے فریق کے سرور پر کوئی اپ لوڈ نہیں۔
اسکرپٹ کی ترمیم نے واقعی کیا کیا اس کی جانچ
ایک کنفیگ فائل پر sed/awk/Python regex چلایا؟ اصل اور نتیجہ یہاں چسپاں کریں تاکہ تصدیق کریں کہ اسکرپٹ نے صرف وہی ترمیم کی جس کی آپ نے توقع کی تھی۔ کریکٹر کی سطح کی نمایاں کاری اضافی ترامیم کو پکڑتی ہے جو ایک تیز بصری اسکین چھوڑ دیتا ہے۔
ترجمہ شدہ ٹیکسٹ میں ٹائپو کا پتہ لگانا
ترجمہ کا جوڑا (ماخذ بمقابلہ ترجمہ، یا ایک ہی ماخذ کے دو ترجمے) — لفظ کی سطح کا diff ایک گمشدہ لفظ، ایک نقل شدہ جملہ، یا ایک رموز اوقاف کی پلٹ تلاش کرنا معمولی بنا دیتا ہے جسے پروف ریڈرز چھوڑ دیتے ہیں۔
مقامی diffing کیوں اہم ہے
آپ جو ٹیکسٹ موازنہ کرتے ہیں وہ عام طور پر نجی ہوتے ہیں: اندرونی ریپوز سے کوڈ، معاہدے کے مسودے، صارف کے ڈیٹا کی برآمدات، یا غیر جاری شدہ پروڈکٹ کاپی۔ انہیں ایک اجنبی کے سرور میں چسپاں کرنا ایک کاغذی پگڈنڈی بناتا ہے جسے آپ کنٹرول نہیں کرتے۔ iKit کا diff چیکر JavaScript ہے جو پہلے ہی آپ کے براؤزر ٹیب میں لوڈ ہو چکا ہے — موازنہ آپ کے CPU پر چلتا ہے اور کبھی نیٹ ورک ساکٹ کو نہیں چھوتا۔
diffing کے دوران صفر نیٹ ورک درخواستیں — DevTools → Network میں قابل تصدیق۔
ان پٹس براؤزر میموری میں رہتے ہیں؛ صاف کرنے یا صفحہ تازہ کرنے پر صاف ہو جاتے ہیں۔
اندرونی کوڈ، 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) الگورتھم چلاتے ہیں۔ جو لائنیں دونوں طرف میل کھاتی ہیں انہیں برابر نشان زد کیا جاتا ہے۔ جو لائنیں میل نہیں کھاتیں ان کو 'تبدیلی' قطاروں میں جوڑا جاتا ہے جب اضافہ حذف کے ساتھ ظاہر ہوتا ہے۔ ہر جوڑی شدہ تبدیلی کے لیے، ہم لائن کے الفاظ پر دوسرا LCS چلاتے ہیں (خالی جگہ سے تقسیم کیا گیا) تاکہ صرف اصل ترمیم شدہ الفاظ سرخ/سبز روشن ہوں — نہ کہ پوری لائن۔
تقسیم اور یکجا نظارے میں کیا فرق ہے؟
تقسیم نظارہ دو ٹیکسٹ کو جوڑے گئے لائن نمبروں کے ساتھ ساتھ ساتھ دکھاتا ہے — IDEs (VS Code, JetBrains) میں diff کے ظاہر ہونے کے قریب۔ یکجا نظارہ ایک کالم +/− سابقہ لائنوں کے ساتھ دکھاتا ہے — `git diff` جو پرنٹ کرتا ہے اس کے قریب۔ جو بھی آپ کے ورک فلو سے میل کھاتا ہو اسے منتخب کریں؛ دونوں ایک ہی ڈیٹا پیش کرتے ہیں۔
'خالی جگہ نظر انداز کریں' کیوں مدد کرتا ہے؟
کوڈ کو دوبارہ فارمیٹ کرنا (Prettier چلانا، tab/space سوئچ کرنا، لائن اختتام کو معیاری بنانا) بصری شور شامل کرتا ہے جو حقیقی تبدیلیوں کو دبا دیتا ہے۔ 'خالی جگہ نظر انداز کریں' کو ٹوگل کرنا spaces/tabs کی لڑیوں کو ایک واحد جگہ میں سکیڑتا ہے اور diffing سے پہلے لائن کے کناروں کو تراشتا ہے — تاکہ آپ صرف بامعنی ترامیم دیکھیں، نہ کہ ظاہری۔
براؤزر میں سب سے بڑا ان پٹ کیا ہے جس کا میں diff کر سکتا ہوں؟
LCS الگورتھم O(m × n) میموری استعمال کرتا ہے جہاں m اور n ہر طرف لائن کی تعداد ہیں۔ iKit موازنے کو ~40 لاکھ خانوں (≈16 MB) پر محدود کرتا ہے، جو چند ہزار لائنوں بمقابلہ چند ہزار لائنوں کو آرام سے سنبھالتا ہے۔ بڑے diffs (پوری ڈیٹا بیس ڈمپس، فل فائل لاگز) کے لیے، ایک CLI ٹول استعمال کریں جیسے `diff` یا `git diff --no-index` — یہ ایک زیادہ ہوشیار الگورتھم (Myers diff) استعمال کرتے ہیں جو لاکھوں لائنوں تک پیمانہ کرتا ہے۔