§

Options

ویو
دانے داری
Preprocessing
§

Input

پاکستانی انجینئرنگ ٹیمیں GitHub اور GitLab پر Git پل ریکوئسٹ ریویوز میں دن بھر diff سطح سے ملتی ہیں۔ NADRA، FBR اور NIC جیسے سرکاری اداروں کے لیے کنفیگریشن فائلوں اور رسائی کنٹرول فہرستوں کو تبدیلیاں کمٹ کرنے سے پہلے diff کرنا ضروری ہے، اور وہ حصے عوامی SaaS موازنہ سروس میں پیسٹ کرنا عموماً ڈیٹا ہینڈلنگ پالیسیوں کی خلاف ورزی ہے۔ براؤزر ٹیب میں موازنہ چلانا — کوئی اپلوڈ نہیں، کوئی اکاؤنٹ نہیں، کوئی تھرڈ پارٹی لاگ نہیں — ورک فلو انجینئرز کے لیے تیز اور ڈیٹا ہینڈلنگ پالیسی لکھنے والوں کے لیے قابلِ قبول رکھتا ہے۔

Diff الگورتھم کیسے کام کرتے ہیں

اس صفحے پر ہر diff ویو Myers الگورتھم سے بنتا ہے — Eugene W. Myers کی 1986 کی تکنیک جو دو ٹوکن سیکوئنسز کے درمیان مختصر ترین ایڈٹ اسکرپٹ O((N+M)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 پائپ لائن کا انتظار کیے بغیر دیکھیں کیا بدلا۔ یونیفائیڈ ویو ایسا آؤٹ پٹ دیتا ہے جو چیٹ تھریڈ یا ٹکٹ میں سیدھا کاپی ہو سکتا ہے۔
  • کنٹریکٹ اور دستاویز ریڈ لائنز — لفظ سطح diff دکھاتا ہے کہ Word کے Track Changes پینل سے تیز کنٹریکٹ مسوداتی درمیان کون سی شرطیں بدلیں۔ شق A پہلے مسودے سے اور شق B حتمی نسخے سے پیسٹ کریں اور متبادل عین اس جملے پر سرخ-بر-سبز روشن ہوتا ہے جو بدلا۔
  • مضمون اور مسودہ نظر ثانی — لکھاری پہلے مسودے کو ترمیم شدہ ورژن سے موازنہ کرتے ہوئے لفظ دانے داری پر جا کر ہر متبادل، اضافہ، اور کٹوتی دیکھ سکتے ہیں بغیر دونوں نسخے دوبارہ پڑھے۔ مترجم، ایڈیٹرز، اور صحافت ٹیمیں بھی یہی ورک فلو استعمال کرتے ہیں۔
  • لاگ اور کنفیگ موازنہ — دو سرور کنفیگ سنیپ شاٹس، دو cron شیڈولز، یا دو ps aux آؤٹ پٹس کا موازنہ کرنے والے سسٹم ایڈمنز لائن دانے داری استعمال کر کے 200 لائن فائل میں ایک بدلا پیرامیٹر سیکنڈوں میں ڈھونڈ سکتے ہیں۔

عام استعمالات

متن diff لکھائی، ترقی، اور آپریشنز کام میں ہر ایڈٹ سائیکل کے اختتام پر ظاہر ہوتا ہے۔

  • پل ریکوئسٹ ریویو: برانچ چیک آؤٹ کی اوور ہیڈ کے بغیر منطقی تبدیلی سمجھنے کے لیے دو فنکشن نفاذات سائیڈ بائی سائیڈ پیسٹ کریں۔
  • بین الاقوامیت سازی QA: انگریزی سورس سٹرنگ کو ترجمے سے لفظ سطح پر موازنہ کریں تاکہ اضافے، حذف، یا اصطلاحی تبدیلیاں پکڑیں۔
  • واقعہ تجزیہ: دو Kubernetes مینی فیسٹ سنیپ شاٹس یا دو "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 بائیں سرخ اور دائیں سبز، لائن 4 بائیں سرخ اور دائیں سبز، اور لائنیں 2، 3، 5 دونوں طرف غیر تبدیل۔ خلاصہ پٹی: 2 اضافے، 2 حذف، 3 غیر تبدیل، 60% مماثلت۔ لفظ دانے داری پر تبدیل کریں اور صرف = کے بعد کی قدریں روشن ہوتی ہیں، مماثلت ~85% ہو جاتی ہے۔

کیا یہ میرے براؤزر میں چلتا ہے؟

ہاں۔ پورا diff حساب اوپن سورس jsdiff لائبریری کے ذریعے کلائنٹ سائیڈ چلتا ہے جو صفحے کے ساتھ لوڈ ہوتی ہے۔ آپ جو کچھ ٹائپ، پیسٹ، یا موازنہ کرتے ہیں کسی سرور کو نہیں بھیجا جاتا۔ خود تصدیق کریں: DevTools کھولیں، Network ٹیب پر جائیں، لاگ صاف کریں، موازنہ کریں، اور تصدیق کریں کہ موازنہ قدم کے لیے کوئی نیٹ ورک درخواست نہیں آئی۔

مماثلت فیصد کا کیا مطلب ہے؟

مماثلت = غیر تبدیل ٹوکن / max(اصل ٹوکن کل، بدلے ہوئے ٹوکن کل)۔ 100% کا مطلب پری پروسیسنگ اختیارات کے بعد ان پٹس ایک جیسے ہیں۔ 0% کا مطلب کوئی مشترک ٹوکن نہیں۔ یہ میٹرک ایڈٹ فاصلے کا تخمینی پیمانہ ہے — فوری گیج کے لیے مفید۔

کیا میں JSON / YAML / XML کو معنوی طور پر diff کر سکتا ہوں؟

اس ٹول میں نہیں۔ یہ متن سطح diff ہے، اس لیے JSON یا XML کی صرف خالی جگہ ری فارمیٹنگ بھی بہت سی تبدیلیاں دکھاتی ہے جب ڈیٹا منطقی طور پر ایک جیسا ہو۔ JSON آبجیکٹ میں کلیدوں کی ترتیب بدلنا بھی تبدیلی دکھاتا ہے۔ معنوی diff کے لیے، پیسٹ کرنے سے پہلے دونوں ان پٹس کو ایک جیسی انڈینٹیشن اور کلید ترتیب میں معیاری بنائیں۔

یونیفائیڈ اور سائیڈ بائی سائیڈ ویوز میں کیا فرق ہے؟

سائیڈ بائی سائیڈ دو کالم رینڈر کرتا ہے: اصل بائیں اور بدلا ہوا دائیں، سرخ ہٹائی گئی لائنیں اور سبز شامل کی گئی لائنیں۔ غیر تبدیل لائنیں دونوں کالموں میں ایک قطار میں سیدھ کریں۔ یونیفائیڈ ایک کالم رینڈر کرتا ہے جیسے git diff — − اور + پریفکس کے ساتھ۔ یونیفائیڈ استعمال کریں جب آپ نتیجہ patch فائل کے طور پر کاپی کرنا یا کوڈ ریویو تھریڈ میں پیسٹ کرنا چاہیں۔ سائیڈ بائی سائیڈ جب کیا کسی اور سے بدلا اس کی بصری سیدھ زیادہ اہم ہو۔

اصل بائیں، بدلا ہوا دائیں پیسٹ کریں، ویو اور دانے داری منتخب کریں، اور ملی سیکنڈوں میں موازنہ ظاہر ہوتا ہے۔ لائیو موڈ آن کریں اور diff ہر کیسٹروک پر دوبارہ چلتا ہے۔ نتیجہ معیاری یونیفائیڈ .patch فائل کے طور پر ڈاؤن لوڈ کریں جسے git apply براہ راست استعمال کرتا ہے۔ کوئی اپلوڈ نہیں، کوئی اکاؤنٹ نہیں، کوئی API کلید نہیں، کوئی کوٹہ نہیں۔