Ako používať príkaz diff3 v systéme Linux


Kľúčové poznatky

  • diff3 zisťuje rozdiely medzi tromi textovými súbormi, aby pomohol identifikovať úpravy, verzie súborov a zlúčiť zmeny.
  • Rozdiely sa zobrazujú v kusoch s číslami riadkov a indikátormi súborov, aby sa dali ľahko identifikovať rozdiely.
  • diff3 dokáže zlúčiť obsah troch súborov so zvýraznenými konfliktmi na manuálne riešenie.

Linuxový príkaz diff3 zisťuje rozdiely medzi tromi textovými súbormi. To vám pomôže identifikovať verzie, pochopiť ich rozdiely a zlúčiť zmeny. diff3 je skvelý pre zdrojový kód, skripty alebo akýkoľvek obyčajný textový súbor.

Čo je rozdiel?

Rozdiel je výsledkom spustenia nástroja na rozlíšenie na množine súborov. Výsledný výstup obsahuje zoznam rozdielov vo vnútri každého zo súborov. Rozdiely sú identifikované číslom riadku a súborom, v ktorom je rozdiel. Ako by ste pravdepodobne očakávali, diff3 vytvára rozdiely z troch súborov.

Balíky kontroly verzií softvéru (SVC), ako je Git, robia rozdiely ako neoddeliteľnú súčasť toho, čím sú, a robia to výnimočne dobre. Ak na porovnávanie súborov používate Git alebo iný SVC, mali by ste v tom pokračovať.

Nie sú to len vývojári, ktorí môžu využívať rozdiely. Ak máte akýkoľvek textový materiál s rôznymi konceptmi uloženými v rôznych súboroch, pravdepodobne vám pomôžu rozdiely.

Príkaz diff3 uľahčuje zvládnutie zložitého problému porovnávania troch súborov.

Ako rozdiel je iný

diff3 má tri názvy súborov ako parametre. Podľa konvencie sa označujú ako moje, staršie a vaše, ale môžu sa pomenovať akokoľvek. Baňa, starší a váš model predpokladá starší súbor predkov a dva upravené deriváty.

Tu je jednoduchý príklad.

Toto je môj-súbor.txt.

first line
second line
edited third line

Toto je starý súbor.txt.

first line
second line
third line

Toto je váš-súbor.txt.

first line
second line
changed third line

Môžeme vykonať trojcestný rozdiel vypísaním súborov v poradí na príkazovom riadku.

diff3 my-file.txt old-file.txt your-file.txt

diff3 hlási, že každý súbor má iný tretí riadok.

Výstupný formát diff3

Rozdiely sú zobrazené v kúskoch. Kus začína reťazcom „====“ a voliteľným číslom, ktoré označuje, z ktorého súboru sú rozdiely. Číslo je pozícia súboru na príkazovom riadku. Žiadne číslo znamená, že všetky tri súbory sa líšia.

Tu je príklad. Súbory starší.txt a váš.txt obsahujú tieto riadky.

Line 1
Line 2
Line 3

Súbor mine.txt obsahuje upravený prvý riadok.

My file Line 1
Line 2
Line 3

Tu je príkaz diff3.

diff3 mine.txt older.txt yours.txt

Oddeľovač „====1“ znamená súbor 1 alebo mine.txt.

„1:“ znamená súbor jedna. „1c“ znamená, že riadok 1 vyžaduje zmenu, ak sa má zhodovať s rovnakým riadkom v staršom súbore. Zobrazí sa riadok.

Zobrazia sa zodpovedajúce riadky zo súborov dva a tri. Pretože obsahujú jeden rovnaký text, je uvedený raz, ale identifikovaný dvakrát. Skladané „2:1c“ a „3:1c“ označujú riadok, ktorý sa objaví v oboch súboroch, pričom riadok je pod nimi.

S týmto textom urobme súbor mine.txt a yours.txt rovnaký.

Line 1
Line 2
Line 3

Súbor starší.txt má upravený druhý riadok.

Line 1
Older file Line 2
Line 3

Nezmenili sme názvy súborov, takže môžeme ten istý príkaz spustiť ešte raz.

diff3 mine.txt older.txt yours.txt

„2“ na konci oddeľovača „====2“ ukazuje rozdiel v tomto kuse v súbore dva. Zobrazí sa zodpovedajúci riadok zo súboru jedna a tri a zobrazí sa riadok s rozdielmi zo súboru dva.

Upravme súbor dva ešte raz a pridáme riadok, ktorý nie je v ostatných súboroch.

Line 1
Older file Line 2
Line 3
Line 4

Môžeme použiť rovnaký príkaz.

diff3 mine.txt older.txt yours.txt

Tentoraz tu máme dvoch hlupákov. Oba oddeľovače odkazujú na rozdiely v súbore dva.

Prvý kus znamená, že riadok dva v súboroch jedna a tri je potrebné zmeniť, aby sa zhodoval s rovnakým riadkom v súbore dva. Alebo je potrebné zmeniť riadok dva v súbore dva tak, aby zodpovedal ostatným dvom súborom.

Druhá časť predstavuje novú informáciu. Súbor starší.txt má štvrtý riadok. „1:3a“ a „3:3a“ nám hovoria, že v súboroch jedna a tri je potrebné pripojiť nový riadok > za riadkom tri, aby sa zhodoval súbor dva. Čiara je zobrazená pod nimi.

Ďalšia vec, ktorú môže diff3 zobraziť, sú sekvencie riadkov obsahujúcich rozdiely.

Urobme súbor mine.txt a starší.txt rovnaký s týmto obsahom.

Line 1
Line 2
Line 3

V súbore yours.txt zmeníme dva riadky

Line 1
Yours Line 2
Yours Line 3

Spustíme rovnaký príkaz.

diff3 mine.txt older.txt yours.txt

Tentoraz indikátory riadkov nepoužívajú jedno číslo riadku. Majú dve čísla riadkov oddelené čiarkou ',', ktoré predstavujú rozsah riadkov. Napríklad „1:2,3c“ nám hovorí, že v súbore 1 majú riadky dva až tri rozdiely.

Zlúčenie s diff3

Namiesto toho, aby sme dostali diff3 na zoznam rozdielov, môžeme požiadať diff3, aby zlúčil obsah a rozdiely zo súborov do jedného súboru. V skutočnosti robí rozdiely medzi súborom tri a súborom dva do súboru číslo jedna.

Ak budete mať šťastie, vaše súbory sa zlúčia bez konfliktov. Niekedy dochádza k zmenám na rovnakom mieste v súboroch, čo spôsobuje konflikty. Konflikty sú zvýraznené, takže si môžete vybrať, ktoré sady riadkov chcete zachovať.

Výstup sa zapíše do okna terminálu, ale môžete ho jednoducho presmerovať do súboru a potom ho upraviť, aby ste si ho mohli prezrieť.

Tu je jednoduchý prípad. Tu je obsah súboru mine.txt.

We're going to
run diff3
against these files.
Yipee!

Toto je obsah starší.txt.

We're going to
run diff3
against these files.

Toto obsahuje súbor yours.txt.

We're going to
run the diff3 command
against these files.

Na vykonanie porovnania použijeme náš známy príkaz a potom ho znova spustíme s voľbou -m (zlúčenie), aby sme vykonali zlúčenie.

diff3 mine.txt older.txt yours.txt
diff3 -m mine.txt older.txt yours.txt

Toto spája rozdiely medzi staršími.txt a tvoj.txt do mine.txt, čím sa vytvorí nová štvrtá verzia. Ak chcete zachytiť tento výstup, pridajte do príkazu presmerovanie.

diff3 -m mine.txt older.txt yours.txt > fourth.txt

Bohužiaľ, je zriedkavé, že vaše zlúčenia sú také hladké. Tu je zložitejší príklad. Rovnaké riadky sa menia v niekoľkých súboroch.

Tu je náš nový súbor mine.txt

chaffinch
swallow
pigeon
sparrow
nuthatch

Toto je náš nový starší.txt

chaffinch
swallow
pigeon
dove
nuthatch

Konečne náš nový yours.txt.

chaffinch
cuckoo
rook
dove
nuthatch
woodpecker
goldfinch

Toto sú výsledky rozdielu.

diff3 mine.txt older.txt yours.txt

Zmeny sú vo všetkých troch súboroch a ďalšie riadky v jednom súbore. Urobíme zlúčenie a presmerujeme výstup do nového súboru.

diff3 -m mine.txt older.txt yours.txt > new-file.txt

Pomocou svojho obľúbeného editora otvorte súbor.

gedit new-file.txt

Úsek medzi dvoma oddeľovačmi „<<<<<<<“ a „>>>>>>>“ je konfliktný.

Konfliktné riadky z každého súboru sa zobrazia postupne. Riadky zo súboru jedna sú medzi '<<<<<<<' a '|||||||', riadky zo súboru dva sú medzi '|||||||' a '===== ==' a riadky zo súboru tri sú medzi '=======' a '>>>>>>>.'

Na súbore v reálnom svete budete mať pravdepodobne niekoľko konfliktných oblastí, ktoré je potrebné skontrolovať a upraviť, aby obsahovali text z časti, ktorú chcete zachovať.

Rozdiely a konflikty

Je ľahké zabudnúť, aké zmeny ste vykonali v rôznych verziách súboru. Príkaz diff3 uľahčuje nájdenie týchto rozdielov. Na zlúčenie je potrebné viac ľudskej interakcie ako na rozdiel, ale prinajmenšom diff3 sťažuje premeškanie konfliktu.