از دو متن یک پچ دیف یکپارچه بسازید
نسخهٔ اصلی را در سمت چپ و ویرایش را در سمت راست قرار دهید، سپس پچ را ذخیره کنید. در مثال کارشده، «beta» اصلاح میشود و «delta» به «epsilon» تبدیل میشود، بنابراین کمینهاسکریپت ویرایش دو حذف و دو افزودن دارد. با سه خط زمینه، این ویرایشهای نزدیک به هم در یک قطعهٔ @@ ظاهر میشوند.
پچ دیف یکپارچه
یک پچ استاندارد --- / +++ با محدودههای @@، زمینهٔ انتخابشده و نشانگرهای صریح نبودِ خطنوی پایانی.
اسکریپت کامل ویرایش خطی
| بدون تغییر | 1 | 1 | alpha |
| حذفشده | 2 | beta | |
| اضافهشده | 2 | beta revised | |
| بدون تغییر | 3 | 3 | gamma |
| حذفشده | 4 | delta | |
| اضافهشده | 4 | epsilon |
یک خط تغییریافته بهصورت یک خط منها و به دنبال آن یک خط بهعلاوه نوشته میشود، چون دیف یکپارچه عملیات جایگزینی جداگانهای ندارد.
خطوط بدون تغییر «alpha» و «gamma» زمینهای فراهم میکنند که به برنامهٔ اعمالکنندهٔ پچ کمک میکند ویرایشها را در سند مقصد پیدا کند.
سرآیندهای --- و +++ از یک نام فایل محلی پاکسازیشده استفاده میکنند و هیچ مهر زمانی یا مسیر دستگاهی ندارند.
چگونگی کار
مراحل انجام کار
- خطنوهای CRLF و CR تنها را به LF یکسانسازی کنید و ثبت کنید که آیا آخرین خط منطقی هر سند خطنوی پایانی دارد یا نه.
- یک ماتریس طولانیترین زیردنبالهٔ مشترک را روی متن کامل هر خط بهعلاوهٔ وضعیت پایان آن بسازید و هرگاه چند اسکریپت کمینه برابر باشند، حذف را بر درج مقدم بدارید.
- هر ویرایش را به اندازهٔ تعداد درخواستی خطوط زمینهٔ بدون تغییر گسترش دهید و محدودههایی را که به هم میرسند یا همپوشانی دارند در قطعههای دیف یکپارچه ادغام کنید.
- برچسبهای پاکسازیشدهٔ --- و +++، محدودههای دقیق @@ بهصورت شروع,تعداد و پیشوندهای فاصله، منها یا بهعلاوه را در یک پچ قابل دانلود بنویسید.
فرضها
- مقایسه خطی است و پس از یکسانسازی خطنو دقیق انجام میشود؛ تفاوتهای فضای خالی، بزرگی و کوچکی حروف و نرمالسازی یونیکد نادیده گرفته نمیشوند.
- هر طرف به ۲۰۰۰ نویسه محدود است تا ماتریس درجهدوم طولانیترین زیردنبالهٔ مشترک در مرورگر محدود بماند.
- ممکن است بیش از یک کمینهاسکریپت ویرایش وجود داشته باشد. تقدم حذف در برابریها این خروجی را تکرارپذیر میکند، اما از نظر ریاضی یگانه و ممتاز نیست.
- پچی که از نظر نحوی درست است همچنان میتواند روی فایل سومی که محتوای پیرامونش تغییر کرده شکست بخورد؛ این ابزار پچها را اعمال یا ادغام نمیکند.
پرسشهای رایج
چرا جایگزینی دو خط، چهار تغییر محسوب میشود؟
مدل ویرایش خطی هر خط قدیمی را حذف و هر خط جدید را درج میکند. بنابراین دو جایگزینی، دو حذف بهعلاوهٔ دو افزودن ایجاد میکند.
آیا پچ ساختهشده میتواند مسیر محلی من را فاش کند؟
خیر. فقط از برچسب پاکسازیشدهٔ نهایی استفاده میشود. پوشههای جداشده با اسلش، بکاسلشها و نویسههای کنترلی پیش از نوشتن سرآیندها کنار گذاشته میشوند.
منابع
روش کامل، مثال محاسبهشده و همهٔ فرضهای این نتیجه در این صفحه آمده است: دیفساز متن.