lappa | |
---|---|
Sorts | UNIX [d] verktyg |
Utvecklaren | Andreas Gruenbacher, Jim Meyering |
Operativ system | Programvara för flera plattformar |
Första upplagan | 1985 |
senaste versionen |
|
Licens | GPL |
Hemsida | savannah.gnu.org/project... |
patch är ett Unix -programverktyg som är utformat för att överföra redigeringar (ändringar) mellan olika versioner av textfiler. Information om redigering finns vanligtvis i en separat fil som kallas "patch", "edit" eller "edit file" (" patchfil " - engelsk patchfil ). En sådan fil skapas vanligtvis med ett annat Unix-verktyg, diff , som automatiskt extraherar information om skillnader i texten i filer.
Det ursprungliga patchprogrammet skrevs av den framtida Perl- författaren Larry Wall ( upplagt på mod.sources ). Idag är patchprogrammet en del av GNU- projektet och underhålls av FSF .
Medan den ursprungliga avsikten med ett program var att överbrygga skillnader mellan versioner av programfiler (så att en programmerare som gjorde användbara ändringar i sitt program kunde dela dessa ändringar med andra programmerare som använder tidigare versioner av koden), kan patch användas för att överbrygga skillnader mellan två valfria textfiler, inklusive men inte begränsat till programdokumentation, html-filer och så vidare.
"Ändra filer" eller "korrigeringar" eller, informellt, "korrigeringar" som används av korrigeringsverktyget ("korrigeringsfiler", "lappar") är textfiler i ett speciellt format. Till skillnad från dem finns det också binära filer med liknande syfte, men de senare har som regel ingenting att göra med korrigeringsverktyget och är förknippade med uppgifterna att göra ändringar i binära (icke-text) filer, inklusive program körbara filer.
Filerna som är resultatet av diff- arbete har ett visst format, vilket är bekvämt bland annat för att läsa och göra redigeringar "manuellt" av användaren själv.
Ett exempel på innehållet i en sådan fil:
--- a/path/to/file 2021-01-26 22:55:55.288371691 +0300 +++ b/path/to/file 2021-01-26 22:58:31.790414616 +0300 @1. -85. @@ +#include <stdio.h> + int -main(void) +main(int argc, char** argv) { + printf("%s: Exempel på `diff`-användning;\n", __FILE__); returnera 0; }Raden som börjar med ett trippelt minustecken (i det enklaste fallet den första raden) innehåller den relativa sökvägen till originalfilen och den senaste ändringstiden. Sedan på nästa rad, efter det trippel plustecknet, är den relativa sökvägen och den senast ändrade tiden för den slutliga versionen av filen som användes för att skapa patchen.
Vidare, på raden som börjar och slutar med den dubbla symbolen "@" efter "minustecknet", radnumret i början av det givna textavsnittet och antalet rader som detta avsnitt upptog i den gamla versionen av filen indikeras, och efter "plus"-tecknet, liknande egenskaper för avsnittet i den nya filen. Nedan är själva avsnittet, där ett mellanslag läggs till i början av varje rad om raden inte har ändrats, "minus" om den inte finns i den nya filen, och följaktligen "plus" om denna rad har lagts till. I exemplet ovan finns det bara ett sådant segment, men det kan finnas hur många som helst. Dessutom kan patchen innehålla information om ändringar som gjorts i andra filer om kommandot difftillämpades på en katalog.
Mycket ofta sker patchning i samband med att man använder något slags versionskontrollsystem . Om ändringsfilen skapades med en av dem, till exempel git , kommer formatet inte att vara fundamentalt annorlunda, det kan helt enkelt innehålla ytterligare information som är redundant för verktyget patch.
För att skapa en patch eller redigera fil med hjälp av diff-verktyget, kör:
$ diff -u old_file new_file > diff.diff # Omkopplaren -u säger åt diff att skriva ut skillnaden i det som kallas "standard" ("unified") formatFör att applicera den resulterande patchen, kör följande kommando:
$ patch < difference.diffOm du kör det sista kommandot överförs skillnaden från den nya filen till den gamla, och den gamla filen uppdateras. (Om den gamla filen inte hittas i den angivna sökvägen kommer programmet att ge ett felmeddelande.)
Patchen kan "rullas tillbaka", det vill säga avbrytas, genom att föra -R-omkopplaren till patchprogrammet:
$ patch -R < difference.diffSom regel kan patchverktyget uppdatera filen korrekt även om den har ändrats något (till exempel har den redigerats i ett område som inte överlappar omfattningen av den aktuella patchen).
För att göra detta använder patchverktyget en "kontext" - några rader intill patchens omfattning, lagrade i redigeringsfilen tillsammans med annan information om ersättningen.
Men i fallet med en betydande avvikelse mellan filen som korrigeringen är applicerad på (“applied”) och källfilen som användes för att skapa korrigeringen, garanteras inte korrektheten av att applicera korrigeringen, generellt sett.
Skapat för användning på Unix-system, har patchverktyget sedan porterats till Windows -plattformen och flera andra. Windows patchversioner kan hittas i paketen GnuWin32 och UnxUtils , såväl som i Cygwin- miljön .
Unix-kommandon | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
|