GNU/Linux >> Znalost Linux >  >> Linux

Spolupracujte na souboru pomocí rozdílu a opravy Linuxu

Upravuji spoustu textových souborů. Někdy je to kód. Jindy je to psané slovo pro hry na hrdiny (RPG), knihy o programování nebo obecnou korespondenci. Někdy je hezké udělat změnu, ale aby můj spolupracovník porovnal moji změnu s tím, co původně napsali. Mnoho lidí standardně používá kancelářské sady, jako je LibreOffice, pomocí komentářů nebo funkcí sledování změn. Někdy však dává větší smysl jednodušší nástroj, a proto se můžete podívat do historie programování pro nástroje jako diff a patch , které poskytují standardizované formátování pro sledování a aplikaci změn na sdílené soubory.

Další zdroje pro Linux

  • Cheat pro příkazy Linuxu
  • Cheat sheet pro pokročilé příkazy systému Linux
  • Bezplatný online kurz:Technický přehled RHEL
  • Síťový cheat pro Linux
  • Cheat sheet SELinux
  • Cheat pro běžné příkazy pro Linux
  • Co jsou kontejnery systému Linux?
  • Naše nejnovější články o Linuxu

I v případě jednoduchého souboru je synchronizace dvou dokumentů složitá. Některé položky se změní, jiné zůstanou, přidá se nový obsah a některé zůstanou stejné, ale přesunou se na jiná místa v dokumentu. Je obtížné replikovat změny, aniž bychom blaženě přijali, že všechny změny jsou stejně platné, a nenahradili starý soubor novým. Je také monoliticky neprůhledný. Změn je tolik, že je těžké přesně určit, co se změnilo.

Pomocí diff můžete vytvořit záznam o tom, jak se soubor změnil, a pomocí patch tyto změny můžete "znovu přehrát" přes starou verzi, abyste ji aktualizovali s novou verzí.

Nastavení

Předpokládejme, že vy a já spolupracujeme na souboru popisujícím, jak připravit šálek čaje.



Zatím soubor tea.md obsahuje raw copy-paste:

Boil water.
Warm the teapot.
Add tea and water to the teapot.
Place a tea cosy over the teapot.
Steep for 6 minutes.
Pour tea into cup.
Add milk.

Zdá se to rozumné, ale vždy existují optimalizace, které můžete provést, takže mi pošlete soubor na vylepšení. Ve snaze objasnit proces přípravy čaje zkopíruji soubor jako tea-revision.md a upravte jej a skončíte tímto:

Warm a teapot in the proving drawer of your oven.
Boil water.
Add tea leaves to a tea strainer.
Add strainer and water to teapot.
Steep for 6 minutes. Keep it warm with a tea cosy.
Pour tea into cup.
Optionally, add warm milk.

Podle očekávání některé položky (Boil water a Pour tea into cup ) se nemění, zatímco ostatní řádky (Warm the teapot ) mají doplňky. Některé řádky jsou zcela nové a některé jsou stejné, ale v jiném pořadí.

Vytvořit rozdíl

diff nástroj zobrazí rozdíl mezi dvěma soubory. Existuje několik různých způsobů, jak zobrazit výsledky, ale myslím, že nejjasnější je --unified (-u zkráceně) zobrazení, které ukazuje, které řádky byly přidány nebo odečteny. Řádek, který se jakýmkoli způsobem změnil, je považován za řádek, který byl odečten a poté přidán. Ve výchozím nastavení diff vytiskne svůj výstup na terminál.

Zadejte diff se starým souborem a poté s novým souborem:

$ diff --unified tea.md tea-revised.md 
--- tea.md      2021-11-13 10:26:25.082110219 +1300
+++ tea-revised.md      2021-11-13 10:26:32.049110664 +1300
@@ -1,7 +1,7 @@
+Warm a teapot in the proving drawer of your oven.
 Boil water.
-Warm the teapot.
-Add tea and water to the teapot.
-Place a tea cosy over the teapot.
-Steep for 6 minutes.
+Add tea leaves to a tea strainer.
+Add strainer and water to teapot.
+Steep for 6 minutes. Keep it warm with a tea cosy.
 Pour tea into cup.
-Add milk.
+Optionally, add warm milk.

Znaménko plus (+ ) na začátku řádku označuje něco, co bylo přidáno do starého souboru. Znaménko mínus (- ) na začátku řádku označuje řádek, který byl odstraněn nebo změněn.

Vytvořte opravu pomocí diff

Opravný soubor je pouze výstupem diff --unified příkaz umístěn do souboru. Můžete to udělat pomocí standardního přesměrování Bash:

$ diff -u tea.md tea-revised.md > tea.patch

Obsah souboru je přesně stejný, jako byl výstup na terminál. Rád si prohlížím záplatové soubory v Emacsu, který barevně odlišuje každý řádek podle toho, zda byl přidán nebo odečten.

Použití změn pomocí opravy

Jakmile budu mít záplatový soubor, mohu vám jej poslat, abyste si jej zkontrolovali a případně aplikovali na váš starý soubor. Opravu aplikujete pomocí patch příkaz:

$ patch tea.md tea.patch

Řádky byly přidány, řádky byly odečteny a nakonec skončíte se souborem identickým s mou verzí:

$ cat tea.md
Warm a teapot in the proving drawer of your oven.
Boil water.
Add tea leaves to a tea strainer.
Add strainer and water to teapot.
Steep for 6 minutes. Keep it warm with a tea cosy.
Pour tea into cup.
Optionally, add warm milk.

Neexistuje žádný limit, kolikrát můžete opravit soubor. Můžete opakovat moje změny, vygenerovat nový patch a poslat mi ho ke kontrole. Odesílání změn namísto výsledků umožňuje každému přispěvateli zkontrolovat, co se změnilo, rozhodnout se, co chce zachovat nebo odstranit, a přesně dokumentovat proces.

Instalovat

V Linuxu a macOS již máte oba diff a patch příkazy. V systému Windows můžete získat diff a patch přes Cygwin nebo použijte Chocolatey k vyhledání diffutils a patchů.

Pokud jste se někdy pokoušeli spolupracovat na souborech prostřednictvím e-mailu nebo chatu a zjistili jste, že se snažíte popsat kde potřebujete provést změnu, pak se vám bude líbit diff a patch . Pečlivě strukturovaný soubor, jako je kód nebo řádky oddělený Markdown, lze snadno porovnávat, opravovat a udržovat.


Linux
  1. Linux .htaccess tipy a triky

  2. Jak zašifrovat a dešifrovat soubor pomocí GnuPG v Linuxu

  3. Jak vytvářet a aplikovat opravy v GIT pomocí příkazu diff a použít

  1. 7 Příklady příkazů Patch pro použití souborů oprav rozdílů v systému Linux

  2. Údržba souborových systémů Linux pomocí „fsck“ a „tune2fs“

  3. Jak komprimovat a dekomprimovat soubory .bz2 v Linuxu pomocí příkazu bzip2

  1. Jak dekomprimovat formát souboru .xz v Linuxu pomocí nástrojů tar a xz?

  2. Jak šifrovat a dešifrovat soubory/složky v Linuxu pomocí GnuPG

  3. Použití kbhit() a getch() v Linuxu