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ů.
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 .
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.
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.
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átChcete-li použít výslednou opravu, spusťte následující příkaz:
$ patch < rozdíl.diffSpuš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.diffObsluž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.
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 .