متنهای پیکربندی را بدون خطوط زمینه مقایسه کنید
پیش از دانلود دیف، خطوط زمینه را صفر کنید. اگر یک مقدار نزدیک به ابتدا و مقدار دیگری نزدیک به انتها تغییر کند، خروجی شامل دو قطعهٔ @@ کوچک است که فقط خطوط حذفشده و اضافهشده را دارند. پیکربندی بدون تغییر خارج از پچ میماند، اما همچنان در یافتن کمینهاسکریپت ویرایش نقش دارد.
پچ دیف یکپارچه
یک پچ استاندارد --- / +++ با محدودههای @@، زمینهٔ انتخابشده و نشانگرهای صریح نبودِ خطنوی پایانی.
اسکریپت کامل ویرایش خطی
| حذفشده | 1 | host=localhost | |
| اضافهشده | 1 | host=127.0.0.1 | |
| بدون تغییر | 2 | 2 | port=3000 |
| بدون تغییر | 3 | 3 | mode=development |
| حذفشده | 4 | cache=false | |
| اضافهشده | 4 | cache=true |
زمینهٔ صفر تغییری در این نمیدهد که کدام خطوط اضافه یا حذف شدهاند؛ فقط مقدار محتوای بدون تغییر پیرامون آنها را تغییر میدهد.
ویرایشهای دور از هم بهجای پیوستن از طریق خطوطی که برای توصیف هیچکدام لازم نیستند، جدا از هم باقی میمانند.
جدول ویرایش روی صفحه همچنان اسکریپت کامل را فهرست میکند، در حالی که فایل پچ از زمینهٔ فشردهٔ انتخابشده پیروی میکند.
چگونگی کار
مراحل انجام کار
- خطنوهای CRLF و CR تنها را به LF یکسانسازی کنید و ثبت کنید که آیا آخرین خط منطقی هر سند خطنوی پایانی دارد یا نه.
- یک ماتریس طولانیترین زیردنبالهٔ مشترک را روی متن کامل هر خط بهعلاوهٔ وضعیت پایان آن بسازید و هرگاه چند اسکریپت کمینه برابر باشند، حذف را بر درج مقدم بدارید.
- هر ویرایش را به اندازهٔ تعداد درخواستی خطوط زمینهٔ بدون تغییر گسترش دهید و محدودههایی را که به هم میرسند یا همپوشانی دارند در قطعههای دیف یکپارچه ادغام کنید.
- برچسبهای پاکسازیشدهٔ --- و +++، محدودههای دقیق @@ بهصورت شروع,تعداد و پیشوندهای فاصله، منها یا بهعلاوه را در یک پچ قابل دانلود بنویسید.
فرضها
- مقایسه خطی است و پس از یکسانسازی خطنو دقیق انجام میشود؛ تفاوتهای فضای خالی، بزرگی و کوچکی حروف و نرمالسازی یونیکد نادیده گرفته نمیشوند.
- هر طرف به ۲۰۰۰ نویسه محدود است تا ماتریس درجهدوم طولانیترین زیردنبالهٔ مشترک در مرورگر محدود بماند.
- ممکن است بیش از یک کمینهاسکریپت ویرایش وجود داشته باشد. تقدم حذف در برابریها این خروجی را تکرارپذیر میکند، اما از نظر ریاضی یگانه و ممتاز نیست.
- پچی که از نظر نحوی درست است همچنان میتواند روی فایل سومی که محتوای پیرامونش تغییر کرده شکست بخورد؛ این ابزار پچها را اعمال یا ادغام نمیکند.
پرسشهای رایج
آیا یک دیف یکپارچه با زمینهٔ صفر هنوز یک پچ معتبر است؟
بله. سرآیندهای محدودهٔ آن میتوانند محدودههای قدیمی یا جدید با طول صفر داشته باشند و هر خط تغییریافته همچنان پیشوند بهعلاوه یا منهای لازم را دارد.
چه زمانی بهتر است خطوط زمینه را نگه دارم؟
وقتی کسی باید معنای پیرامون را مرور کند، یا وقتی پچ قرار است روی فایلی اعمال شود که ممکن است از زمان مقایسه تغییر کرده باشد، زمینه را نگه دارید.
منابع
روش کامل، مثال محاسبهشده و همهٔ فرضهای این نتیجه در این صفحه آمده است: دیفساز متن.