فهرست

جست‌وجوی ابزارهاگزارش تغییرات

برای جابه‌جایی برای باز کردنمسئله را توضیح دهید، نه نام ابزار را

از دو متن یک پچ دیف یکپارچه بسازید

نسخهٔ اصلی را در سمت چپ و ویرایش را در سمت راست قرار دهید، سپس پچ را ذخیره کنید. در مثال کارشده، «beta» اصلاح می‌شود و «delta» به «epsilon» تبدیل می‌شود، بنابراین کمینه‌اسکریپت ویرایش دو حذف و دو افزودن دارد. با سه خط زمینه، این ویرایش‌های نزدیک به هم در یک قطعهٔ @@ ظاهر می‌شوند.

سمت چپ مقایسه. خط‌نوهای CRLF و CR پیش از مقایسهٔ خطوط به LF یکسان‌سازی می‌شوند.

سمت راست. یک خط تغییریافته به‌صورت یک حذف و یک افزودن نشان داده می‌شود، همان‌طور که دیف یکپارچه ایجاب می‌کند.

خطوط بدون تغییری که پیرامون هر ویرایش نشان داده می‌شوند. ویرایش‌های نزدیک به هم، وقتی زمینه‌شان هم‌پوشانی داشته باشد، ادغام می‌شوند.

خلاصهٔ تغییرات
۲ خط افزوده و ۲ خط حذف شد
خطوط اضافه‌شده
۲
خطوط حذف‌شده
۲
خطوط بدون تغییر
۲
قطعه‌های تغییر
۱

پچ دیف یکپارچه

notes.txt.patch · ۹۸ B

یک پچ استاندارد --- / +++ با محدوده‌های @@، زمینهٔ انتخاب‌شده و نشانگرهای صریح نبودِ خط‌نوی پایانی.

اسکریپت کامل ویرایش خطی

بدون تغییر11alpha
حذف‌شده2beta
اضافه‌شده2beta revised
بدون تغییر33gamma
حذف‌شده4delta
اضافه‌شده4epsilon
نکات اصلی
  1. یک خط تغییریافته به‌صورت یک خط منها و به دنبال آن یک خط به‌علاوه نوشته می‌شود، چون دیف یکپارچه عملیات جایگزینی جداگانه‌ای ندارد.

  2. خطوط بدون تغییر «alpha» و «gamma» زمینه‌ای فراهم می‌کنند که به برنامهٔ اعمال‌کنندهٔ پچ کمک می‌کند ویرایش‌ها را در سند مقصد پیدا کند.

  3. سرآیندهای --- و +++ از یک نام فایل محلی پاک‌سازی‌شده استفاده می‌کنند و هیچ مهر زمانی یا مسیر دستگاهی ندارند.

چگونگی کار

مراحل انجام کار

  1. خط‌نوهای CRLF و CR تنها را به LF یکسان‌سازی کنید و ثبت کنید که آیا آخرین خط منطقی هر سند خط‌نوی پایانی دارد یا نه.
  2. یک ماتریس طولانی‌ترین زیردنبالهٔ مشترک را روی متن کامل هر خط به‌علاوهٔ وضعیت پایان آن بسازید و هرگاه چند اسکریپت کمینه برابر باشند، حذف را بر درج مقدم بدارید.
  3. هر ویرایش را به اندازهٔ تعداد درخواستی خطوط زمینهٔ بدون تغییر گسترش دهید و محدوده‌هایی را که به هم می‌رسند یا هم‌پوشانی دارند در قطعه‌های دیف یکپارچه ادغام کنید.
  4. برچسب‌های پاک‌سازی‌شدهٔ --- و +++، محدوده‌های دقیق @@ به‌صورت شروع,تعداد و پیشوندهای فاصله، منها یا به‌علاوه را در یک پچ قابل دانلود بنویسید.

فرض‌ها

  • مقایسه خطی است و پس از یکسان‌سازی خط‌نو دقیق انجام می‌شود؛ تفاوت‌های فضای خالی، بزرگی و کوچکی حروف و نرمال‌سازی یونیکد نادیده گرفته نمی‌شوند.
  • هر طرف به ۲۰۰۰ نویسه محدود است تا ماتریس درجه‌دوم طولانی‌ترین زیردنبالهٔ مشترک در مرورگر محدود بماند.
  • ممکن است بیش از یک کمینه‌اسکریپت ویرایش وجود داشته باشد. تقدم حذف در برابری‌ها این خروجی را تکرارپذیر می‌کند، اما از نظر ریاضی یگانه و ممتاز نیست.
  • پچی که از نظر نحوی درست است همچنان می‌تواند روی فایل سومی که محتوای پیرامونش تغییر کرده شکست بخورد؛ این ابزار پچ‌ها را اعمال یا ادغام نمی‌کند.

پرسش‌های رایج

چرا جایگزینی دو خط، چهار تغییر محسوب می‌شود؟

مدل ویرایش خطی هر خط قدیمی را حذف و هر خط جدید را درج می‌کند. بنابراین دو جایگزینی، دو حذف به‌علاوهٔ دو افزودن ایجاد می‌کند.

آیا پچ ساخته‌شده می‌تواند مسیر محلی من را فاش کند؟

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

منابع

  • Comparing and Merging Files — GNU Diffutils 3.12Free Software Foundationبررسی‌شده در مربوط به سرآیندهای یکپارچه، قطعه‌ها، محدوده‌ها، زمینه و خطوط ناقص
  • diff — compare two filesThe Open Groupبررسی‌شده در مربوط به مقایسهٔ خطی و اصطلاحات قابل‌حمل diff

روش کامل، مثال محاسبه‌شده و همهٔ فرض‌های این نتیجه در این صفحه آمده است: دیف‌ساز متن.