Patch (Unix)

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 25. srpna 2021; ověření vyžaduje 1 úpravu .

náplast
Typ Nástroj UNIX [d]
Vývojář Andreas Gruenbacher, Jim Meyering
Operační systém Multiplatformní software
První vydání 1985
Nejnovější verze
Licence GPL
webová stránka savannah.gnu.org/project…

patch je unixový  softwarový nástroj určený k přenosu úprav (změn) mezi různými verzemi textových souborů. Informace o úpravách jsou obvykle obsaženy v samostatném souboru nazvaném "patch", "edit" nebo "edit file" (" patch file" - anglicky patch file ). Takový soubor je obvykle vytvořen pomocí jiné unixové utility diff , která automaticky extrahuje informace o rozdílech v textu souborů.  

Historie

Původní patch program napsal budoucí autor Perlu Larry Wall ( posláno na mod.sources ). Dnes je patch program součástí projektu GNU a spravuje ho FSF .

Použití

Zatímco původním záměrem programu bylo překlenout rozdíly mezi verzemi programových souborů (takže programátor, který provedl užitečné změny ve svém programu, mohl tyto změny sdílet s ostatními programátory pomocí předchozích verzí kódu), lze k překlenutí rozdílů použít patch. mezi libovolnými dvěma textovými soubory, mimo jiné včetně dokumentace programu, souborů html atd.

"Změnové soubory" nebo "záplaty" nebo neformálně "záplaty" používané obslužným programem záplat ("záplatovací soubory", "záplaty") jsou textové soubory ve speciálním formátu. Na rozdíl od nich existují také binární soubory podobného účelu, ty však zpravidla nemají nic společného s opravným nástrojem a jsou spojeny s úkoly provádění změn binárních (netextových) souborů, včetně programu spustitelné soubory.

Obsah záplatových souborů

Soubory, které jsou výsledkem diffové práce , mají určitý formát, který je vhodný mimo jiné pro čtení a provádění úprav „ručně“ samotným uživatelem.

Příklad obsahu takového souboru:

--- a/cesta/k/souboru 2021-01-26 22:55:55.288371691 +0300 +++ b/cesta/k/souboru 2021-01-26 22:58:31.790414616 +0300 .1 @@ -1.5 +0300 .1@@ -1.5 @@ +#include <stdio.h> + int -main(void) +main(int argc, char** argv) { + printf("%s: Příklad použití `diff`;\n", __FILE__); návrat 0; }

Řádek začínající trojitým znaménkem mínus (v nejjednodušším případě první řádek) obsahuje relativní cestu k původnímu souboru a čas poslední úpravy. Potom na dalším řádku za trojitým znaménkem plus je relativní cesta a čas poslední úpravy konečné verze souboru použitého k vytvoření opravy.

Dále na řádku začínajícím a končícím dvojitým symbolem "@" za znaménkem "mínus" číslo řádku začátku daného úseku textu a počet řádků , které tento úsek zabíral ve staré verzi souboru jsou uvedeny a za znaménkem "plus" podobné charakteristiky oddílu v novém souboru. Níže je samotná sekce, kde je na začátek každého řádku přidána mezera, pokud se řádek nezměnil, „mínus“, pokud není v novém souboru, a podle toho „plus“, pokud byl tento řádek přidán. V ukázkovém souboru výše je pouze jeden takový segment, ale může jich být libovolný počet. Kromě toho může oprava obsahovat informace o změnách provedených v jiných souborech, pokud byl příkaz diffaplikován na adresář.

Velmi často dochází k záplatám v souvislosti s používáním nějakého systému správy verzí . Pokud byl soubor změn vytvořen pomocí jednoho z nich, například git , pak se formát nebude zásadně lišit, může jednoduše obsahovat další informace, které jsou pro utilitu nadbytečné patch.

Příklad použití

Chcete-li vytvořit opravu nebo upravit soubor pomocí obslužného programu diff, spusťte:

$ diff -u starý_soubor nový_soubor > diff.diff # Přepínač -u říká diffu, aby vytiskl rozdíl v tom, co se nazývá „standardní“ („sjednocený“) formát

Chcete-li použít výslednou opravu, spusťte následující příkaz:

$ patch < rozdíl.diff

Spuštěním posledního příkazu se přenese rozdíl z nového souboru do starého, přičemž se aktualizuje starý soubor. (Pokud starý soubor není v dané cestě nalezen, program vyvolá chybu.)

Opravu lze "vrátit zpět", to znamená zrušit, předáním přepínače -R do programu opravy:

$ patch -R < rozdíl.diff

Obslužný program opravy je zpravidla schopen správně aktualizovat soubor, i když se poněkud změnil (například byl upraven v oblasti, která se nepřekrývá s rozsahem aktuální opravy).

K tomu používá obslužný program opravy „kontext“ – několik řádků sousedících s rozsahem opravy, uložených v souboru úprav spolu s dalšími informacemi o nahrazení.

V případě výrazného nesouladu mezi souborem, na který je záplata aplikována („aplikována“), a zdrojovým souborem použitým k vytvoření záplaty, není obecně řečeno správnost použití záplaty zaručena.

Portování (portování na jiné platformy)

Oprava byla vytvořena pro použití v systémech Unix a od té doby byla portována na platformu Windows a několik dalších. Verze oprav pro Windows lze nalézt v balíčcích GnuWin32 a UnxUtils a také v prostředí Cygwin .

Viz také

  • Deka
  • rsync
  • IEBUPDTE je analogem patch programu, vytvořeného asi o 20 let dříve (pravděpodobně v roce 1964 pro mainframy System 360 ).

Poznámky

  1. https://git.savannah.gnu.org/cgit/patch.git/tag/?h=v2.7.6

Odkazy

  • patch(1): použití souboru rozdílu na originál - manuálová stránka uživatelských příkazů GNU / Linuxu  
  • Patchutils  - Doplňkové programy pro práci s opravami
  • GNU nástroje pro Win32  - Win32 port GNU utilit, včetně diff a patch
  • diffstat  - vydávání statistik na základě výstupu obslužného programu diff