مقایسه‌گر متن (Diff Checker)

دو متن یا قطعه‌کد را خط به خط مقایسه کنید. خطوط اضافه‌شده، حذف‌شده و تغییریافته تا سطح دقیق کلمات متفاوت برجسته می‌شوند.

اجرا در مرورگر شمابدون ثبت‌نامبدون آپلود

برای دیدن تفاوت‌ها، متن را در هر دو کادر جای‌گذاری کنید.

نحوهٔ استفاده از مقایسه‌گر متن (Diff)

  1. متن اصلی را در سمت راست و متن تغییریافته را در سمت چپ جای‌گذاری کنید یا دو فایل باز کنید.
  2. مقایسه همزمان با تایپ به‌روز می‌شود. نمای کنار هم یا یکپارچه را انتخاب کنید.
  3. نادیده گرفتن فاصله‌ها، نادیده گرفتن حروف بزرگ/کوچک یا نادیده گرفتن خطوط خالی را فعال کنید تا تغییرات بی‌اهمیت مانند تورفتگی مجدد پنهان شوند.
  4. با پنهان کردن موارد بدون تغییر روی تغییرات تمرکز کنید؛ سه خط زمینه اطراف هر تغییر باقی می‌ماند.
  5. روی کپی به‌صورت patch یا دانلود ‎.diff کلیک کنید تا یک unified diff استاندارد بگیرید که با git apply یا patch قابل اعمال است.

این مقایسه‌گر چگونه کار می‌کند

ابزار هر دو ورودی را به خط‌ها تقسیم می‌کند و الگوریتم تفاوت Myers را اجرا می‌کند؛ همان الگوریتم O(ND) که git diff و GNU diff استفاده می‌کنند. این الگوریتم کوتاه‌ترین دنبالهٔ درج‌ها و حذف‌ها را پیدا می‌کند که متن اصلی را به متن تغییریافته تبدیل می‌کند، بنابراین نتیجه کمترین تعداد ممکن خط تغییریافته را نشان می‌دهد. خطوط یکسان ابتدا و انتها اول کنار گذاشته می‌شوند، که مقایسهٔ فایل‌های هزاران‌خطی را تقریباً آنی می‌کند.

وقتی یک خط حذف‌شده و یک خط اضافه‌شده کنار هم قرار دارند، به‌عنوان یک خط تغییریافته جفت می‌شوند و دوباره کلمه به کلمه مقایسه می‌شوند. کلماتی که واقعاً تغییر کرده‌اند برجسته‌سازی پررنگ‌تری می‌گیرند، بنابراین یک متغیر تغییرنام‌یافته یا یک عدد ویرایش‌شده در یک خط طولانی به چشم می‌آید.

نمای کنار هم در برابر یکپارچه

کنار هم متن اصلی را در سمت راست و نسخهٔ جدید را در سمت چپ، با شمارهٔ خط برای هر دو، قرار می‌دهد. این ساده‌ترین نما برای بازبینی متن، فایل‌های پیکربندی و تغییرات کوتاه کد است. نمای یکپارچه خطوط حذف‌شده (-) و اضافه‌شده (+) را در یک ستون درهم می‌آورد؛ قالبی که ابزارهای بازبینی کد و فایل‌های patch استفاده می‌کنند.

قالب unified diff (patch)

patch خروجی از قالب diff -u پیروی می‌کند: یک هدر ---/+++ و سپس hunkهایی که با @@ -l,s +l,s @@ شروع می‌شوند، که در آن l شمارهٔ اولین خط و s تعداد خطوط hunk در هر فایل است. هر hunk سه خط زمینهٔ بدون تغییر دارد، بنابراین حتی اگر خطوط مجاور جابه‌جا شده باشند، با patch -p0 یا git apply قابل اعمال است.

چه زمانی از گزینه‌های نادیده‌گیری استفاده کنیم

  • نادیده گرفتن فاصله‌ها خطوطی را که فقط در فاصله یا تب فرق دارند برابر در نظر می‌گیرد. پس از تورفتگی مجدد کد یا تبدیل تب به فاصله از آن استفاده کنید.
  • نادیده گرفتن حروف بزرگ/کوچک برای SQL، HTML و فایل‌های لاگ که بزرگی حروف اهمیتی ندارد مفید است.
  • نادیده گرفتن خطوط خالی خطوطی را که فقط برای فاصله‌گذاری اضافه یا حذف شده‌اند پنهان می‌کند.

پرسش‌های متداول

آیا متن من جایی آپلود می‌شود؟
خیر. مقایسه کاملاً در مرورگر شما و با JavaScript انجام می‌شود. هیچ چیزی که جای‌گذاری می‌کنید به سرور ارسال نمی‌شود، بنابراین می‌توانید کد خصوصی، قراردادها یا فایل‌های پیکربندی را با خیال راحت مقایسه کنید.
متن‌ها تا چه اندازه می‌توانند بزرگ باشند؟
فایل‌هایی با ده‌ها هزار خط روی یک لپ‌تاپ معمولی در کمتر از یک ثانیه مقایسه می‌شوند. چون هزینهٔ الگوریتم با تعداد تفاوت‌ها رشد می‌کند، دو فایل بزرگ و کاملاً متفاوت بیشترین زمان را می‌برند.
آیا می‌توانم به‌جای جای‌گذاری، دو فایل را مقایسه کنم؟
بله. از دکمه‌های باز کردن فایل بالای هر کادر برای بارگذاری فایل محلی استفاده کنید. فایل توسط مرورگر شما خوانده می‌شود و هرگز آپلود نمی‌شود.
چرا یک خط به‌جای تغییریافته، حذف‌شده و اضافه‌شده نمایش داده می‌شود؟
خط‌ها فقط وقتی به‌عنوان «تغییریافته» جفت می‌شوند که یک بلوک از خطوط حذف‌شده مستقیماً کنار یک بلوک از خطوط اضافه‌شده باشد. اگر دو خط متن مشترک بسیار کمی داشته باشند، برجسته‌سازی در سطح کلمه انجام نمی‌شود چون از نمایش کل خط به‌عنوان تغییریافته شلوغ‌تر می‌شد.
چطور اشیای JSON را مقایسه کنم؟
از ابزار JSON Diff استفاده کنید. این ابزار ساختار تجزیه‌شده را مقایسه می‌کند، بنابراین ترتیب کلیدها و قالب‌بندی تفاوت کاذب ایجاد نمی‌کنند و مسیرهای دقیق تغییرکرده را فهرست می‌کند.

ابزارهای مرتبط