ابزار کامپیوتر **وصله** یک برنامه یونیکس است که های متنی را طبق دستورالعمل های موجود در یک جداگانه ، به نام *وصله* ، به روز می کند. وصله (که به اختصار *وصله* نیز نامیده می شود) یک متنی است که از لیستی از تفاوت ها تشکیل شده است و با اجرای برنامه diff مربوط به همراه اصلی و به روز شده به عنوان آرگومان، تولید می شود. به روزرسانی پرونده ها با وصله اغلب به عنوان *اعمال وصله* یا به سادگی *وصله* ها گفته می شود.

تاریخچه
-------

برنامه اصلی وصله توسط لری وال (کسی که با ایجاد زبان برنامه نویسی Perl ادامه داد ) نوشته شد و در `mod.sources`  (که بعدا به `comp.sources.unix` تبدیل شد) در می 1985 ارسال شد. یک نوع برنامه (اما نه تنها نوع برنامه )    بخشی از پروژه GNU است  و توسط FSF نگهداری می شود.

زمینه استفاده
-------------

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

وصله های توصیف شده در اینجا نباید با وصله های باینری اشتباه گرفته شوند ، اگرچه می توانند از نظر مفهومی مشابه باشند ، اما برای به روزرسانی پرونده های باینری متشکل از برنامه به نسخه جدید توزیع می شوند.

وصله هایی در توسعه نرم افزار
----------------------------

های diff که به عنوان ورودی برای وصله استفاده می شوند ، های متنی قابل خواندن هستند ، به این معنی که آنها می توانند به راحتی توسط انسان قبل از استفاده بررسی یا اصلاح شوند.

علاوه بر برنامه "diff "، تفاوت ها را می توان توسط برنامه های دیگری مانند Subversion ، CVS ، RCS ، Mercurial و Git نیز تولید کرد

وصله ها جز اجزای اساسی بسیاری از سیستم های کنترل منبع ، از جمله CVS بوده اند .

### diff های پیشرفته

وقتی از diff های پیشرفته تری استفاده می شود ، وصله ها را می توان حتی برای پرونده هایی که در این ضمن اصلاح شده اند اعمال کرد ، به شرطی که این تغییرات با وصله تداخل نداشته باشند. این امر با استفاده از "diff های زمینه ای "و "diff های یکپارچه "(همچنین به عنوان "unidiffs" شناخته می شود) ، که هر تغییر را با زمینه احاطه می کند ، که زمینه، متن بلافاصله قبل و بعد از قسمت تغییر یافته تعریف می شود. سپس وصله می تواند از این زمینه برای تعیین منطقه مورد نظر برای وصله حتی اگر با تغییراتی که قبلاً در پرونده جابجا شده است ، استفاده کند و از شماره خطوط در diff ها به عنوان نقطه شروع استفاده کند. به دلیل این خاصیت ، diff های زمینه ای و یکپارچه نوع ارجح تر وصله ها برای ارسال به بسیاری از پروژه های نرم افزاری است.

ویژگی های فوق diff و وصله را به ویژه برای تبادل اصلاحات در نرم افزار منبع باز محبوب می کند. افراد خارجی می توانند جدیدترین کد منبع موجود را بارگیری کنند ، اصلاحاتی در آن انجام دهند و آنها را به صورت متفاوت برای تیم توسعه ارسال کنند. با استفاده از diff ها ، تیم توسعه این توانایی را دارد که وصله ها را قبل از استفاده به طور موثر بررسی کنند و می تواند آنها را در یک کد جدیدتر از آنچه که توسعه دهنده خارجی به آن دسترسی داشته است ، اعمال کنند.

مثالهای استفاده
---------------

برای ایجاد یک وصله ، می توان دستور زیر را در پوسته اجرا کرد:

```
$ diff -u oldFile newFile > mods.diff # -u tells diff to output unified diff format

```
برای اعمال وصله ، می توان دستور زیر را در پوسته اجرا کرد:

```
$ patch < mods.diff

```
این به وصله می گوید که تغییرات را درون پرونده های مشخص شده در `mods.diff،` اعمال می کند.اعمال وصله ها در زیرپوشه ها به آپشن اضافی `p *number-*` نیاز دارد ، در صورتی که اگر پوشه پایه درخت منبع در diff وجود داشته باشد ، *عدد 1 است و در غیر این صورت 0 است.*

با گزینه "`-R` "می توان وصله ها را لغو یا معکوس کرد:

```
$ patch -R < mods.diff

```
در برخی موارد که پرونده با نسخه ای که در تناظر آن diff ایجاد شده یکسان نیست ، وصله نمی تواند به صورت تمیز اعمال شود. به عنوان مثال ، اگر در ابتدا خطوط متن درج انجام شود ، شماره خطوط اشاره شده در وصله نادرست خواهد بود.وصله با نگاه کردن به خطوط مجاور برای جابجایی مجدد متن مورد نظر برای وصله می تواند جای جدید را پیدا کند. همچنین با تغییر خطوط **زمینه** (برای diff های زمینه ای و یکپارچه) بازیابی خواهد شد. این به عنوان **فاز** توصیف می شود.

انقال های وصله
--------------

در اصل برای سیستم های یونیکس و یونیکس مانند نوشته شده است ، همچنین به ویندوز و بسیاری از سیستم عامل های دیگر نیز منتقل شده است. درگاه های وصله ویندوز توسط GnuWin32 و UnxUtils ارائه می شوند .

یک دستور patch نیز بخشی از ASCII تحت عنوان *ابزارهای MSX-DOS2* برای MSX-DOS نسخه 2 است.

همچنین ببینید
-------------

* وصله (یارانش)
* لحاف (نرم افزار)
* rsync
* xdelta
* لیست دستورات یونیکس
* برنامه IBM Mainframe IEBUPDTE یک برنامه وصله اصلی است که حدود 20 سال قبل ایجاد شده است (حدود ~ 1964).

منابع
-----

لینک های خارجی
--------------

* `patch` – Commands & Utilities Reference, The Single UNIX® Specification, Issue 7 from The Open Group
* انواع گنو (شامل تفاوت و پچ) ؛ مستندات
* ابزارهای گنو برای Win32 – پورت ابزار Win32 ، از جمله تفاوت و پچ
* Dickey, Thomas E. "DIFFSTAT – make histogram from diff-output". Archived from the original on 2020-01-22. Retrieved 2020-05-01

1. ↑  Larry Wall (May 24, 1985). "patch version 1.3". Google.com at mod.sources. Archived from the original on 24 January 2020. Retrieved 12 July 2021.
2. ↑   بایگانی‌شده در ۲۰۱۷-۰۶-۰۷ توسط Wayback Machine OpenBSD patch source
3. ↑   A version of patch exists in the Schily tools collection
4. ↑  A version of patch is maintained by IBM, Oracle and the Open Software Foundation
5. ↑  "Patch - Free Software Directory". *Free Software Directory*. Free Software Foundation. 2010-05-01. Retrieved 2016-05-25.
6. ↑  MSX-DOS2 Tools User's Manual by ASCII Corporation