patch (Unix) - patch (Unix)
Původní autoři | Larry Wall |
---|---|
Vývojáři | Paul Eggert, Wayne Davison, David MacKenzie, Andreas Grünbacher |
První vydání | 24. května 1985 |
Operační systém | Unix a podobné Unix , MSX-DOS , Microsoft Windows |
Plošina | Cross-platform |
Typ | Příkaz |
webová stránka |
savannah |
Oprava počítačového nástroje je unixový program, který aktualizuje textové soubory podle pokynů obsažených v samostatném souboru, který se nazývá soubor opravy . Soubor opravy ( zkráceně také nazývaný patch ) je textový soubor, který se skládá ze seznamu rozdílů a je vytvořen spuštěním souvisejícího programu diff s původním a aktualizovaným souborem jako argumenty. Aktualizace souborů pomocí opravy se často označuje jako použití opravy nebo jednoduše oprava souborů.
Dějiny
Původní opravný program napsal Larry Wall (který pokračoval v vytváření programovacího jazyka Perl ) a zveřejnil jej mod.sources
(který se později stal comp.sources.unix
) v květnu 1985. Varianta programu (ale ne jediná) je součástí projektu GNU a je udržován FSF .
Kontext použití
Oprava vyvinutá programátorem pro jiné programátory se často používala pro aktualizaci zdrojového kódu na novější verzi. Z tohoto důvodu přišlo mnoho lidí spojit opravy se zdrojovým kódem, zatímco opravy lze ve skutečnosti použít na jakýkoli text. Oprava souborů neshromažďuje žádný nepotřebný text, což někteří lidé vnímají na základě anglického významu slova; oprava dokáže odstranit text stejně jako jej přidat.
Opravy popsané zde by neměly být zaměňovány s binárními opravami , které, i když mohou být koncepčně podobné, jsou distribuovány za účelem aktualizace binárních souborů obsahujících program na nové vydání.
Opravy při vývoji softwaru
Soubory diff, které slouží jako vstup do opravy, jsou čitelné textové soubory, což znamená, že je lze před použitím snadno zkontrolovat nebo upravit lidmi.
Kromě programu „ diff “ mohou být rozdíly vyráběny také jinými programy, jako je Subversion , CVS , RCS , Mercurial a Git .
Opravy byly klíčovou součástí mnoha systémů řízení zdrojů, včetně CVS .
Pokročilé rozdíly
Pokud se používají pokročilejší rozdíly, lze opravy použít i na soubory, které byly mezitím změněny, pokud tyto úpravy nebudou překážet opravě. Toho je dosaženo použitím „ kontextových rozdílů “ a „ sjednocených rozdílů “ (také známých jako „unidiffs“), které obklopují každou změnu kontextem , což je text bezprostředně před a po změněné části. Oprava pak může použít tento kontext k vyhledání oblasti, která má být opravena, i když byla posunuta změnami dříve v souboru, přičemž jako výchozí bod použije čísla řádků v rozdílech. Kvůli této vlastnosti jsou kontext a sjednocené rozdíly upřednostňovanou formou oprav pro odeslání do mnoha softwarových projektů.
Výše uvedené funkce dělají diff a patch obzvláště populární pro výměnu úprav open-source softwaru . Outsiders si mohou stáhnout nejnovější veřejně dostupný zdrojový kód, provádět jeho úpravy a posílat je v různé podobě vývojovému týmu. Pomocí rozdílů má vývojový tým schopnost efektivně zkontrolovat opravy před jejich použitím a může je použít na novější kódovou základnu, než ke které měl přístup externí vývojář.
Příklady použití
Chcete-li vytvořit opravu, můžete v shellu spustit následující příkaz:
$ diff -u oldFile newFile > mods.diff # -u tells diff to output unified diff format
Chcete-li použít opravu, můžete spustit následující příkaz v prostředí:
$ patch < mods.diff
Toto říká, že oprava má použít změny na určené soubory popsané v mods.diff
. Opravy souborů v podadresářích vyžadují další možnost, kde číslo je 1, pokud je základní adresář zdrojového stromu zahrnut v rozdílu, a 0 jinak.
-pnumber
Opravy lze vrátit zpět nebo obrátit pomocí možnosti ' -R
':
$ patch -R < mods.diff
V některých případech, kdy soubor není totožný s verzí, pro kterou byl rozdíl vygenerován, nebude možné opravu použít čistě. Pokud jsou například řádky textu vloženy na začátek, budou čísla řádků uvedená v záplatě nesprávná. Patch je schopen se z toho zotavit tím, že se podívá na blízké řádky a přemístí text, který má být opraven. Obnoví se také při změně řádků kontextu (pro kontext a sjednocené rozdíly); toto je popisováno jako fuzz .
Porty opravy
Původně napsaný pro Unix a unixové systémy, patch byl také přenesen na Windows a mnoho dalších platforem. Porty Windows pro opravu poskytují GnuWin32 a UnxUtils .
patch
Příkaz je také součástí ASCII ‚s MSX-DOS2 Nástroje pro MSX-DOS verze 2.
Viz také
- Oprava (výpočet)
- Přikrývka (software)
- rsync
- xdelta
- Seznam unixových příkazů
- Obslužný program IBM Mainframe IEBUPDTE je opravný program pro sálové počítače, který byl vytvořen asi o 20 let dříve (cca ~ 1964).
Reference
externí odkazy
- The Single UNIX Specification , Issue 7 from The Open Group - Commands & Utilities Reference,
- GNU Diffutils (zahrnuje diff a patch); Dokumentace
- GNU tools for Win32 - Win32 port of tools, including diff and patch
- Dickey, Thomas E. „DIFFSTAT - vytvořit histogram z rozdílového výstupu“ . Archivovány od originálu na 2020-01-22 . Citováno 2020-05-01