Bez ohľadu na to, v akom systéme sa musím pohrať s kódom, skôr či neskôr bude príliš drahé na porovnanie rôzne verzie zdrojov. Tu sú jednoduché bezplatné nástroje na nájdenie rozdielov v súboroch pre Linux, Windows a Mac. Všeobecný formát spustenia –
V systéme Windows sa úloha porovnávania obsahu súborov (a dokonca aj adresárov, čo niekedy nie je zbytočná) dobre vyrovná s WinMerge. Jednoduché. Nie je viazaný na žiadne IDE. Je napísaný v Qt a je multiplatformový – mal by bežať aj na nikoch. Okrem súborov dokáže porovnávať aj obsahy adresárov (aj na základe masiek regulárnych výrazov). Môžete pridať ďalšie doplnky.
WinMerge je multiplatformový nástroj na porovnávanie súborov a ďalšie
Mac - opendiff. Je to samostatný komponent XCode. Samostatný je možné spustiť z príkazového riadku. Zvýrazňuje rozdiely v bledosivej, no mimochodom vie šípkami ukázať, čo kde pribudlo. Môže vykonať zlúčenie (key -merge). Ak okrem porovnávaných súborov zadáte za kľúčom -predok aj súbor spoločného predka, porovnanie sa vykoná s ním. Môže porovnávať priečinky.
opendiff utility – bezplatný nástroj na porovnávanie súborov v systéme Mac
Linux – . Dostupné na všetkých platformách (Windows, Mac, Linux) vďaka tomu, že je napísané aj v Qt. Môže porovnávať až tri súbory alebo adresáre. Podporuje schopnosť zlúčiť zmeny s podporou úprav pre manuálne rozlíšenie konflikty.
Nástroj kdiff3 - porovnanie dvoch súborov
AKTUALIZÁCIA 18.10.2013
Ak pracujete v Gnom na nikoch, potom je meld skvelá voľba. Integrácia s populárnymi systémami na správu verzií (Git, Subversion atď.), zlučovacie nástroje – automatické spájanie, editácia so zachytením aktuálnych rozdielov za behu, zvýrazňovanie syntaxe. Existujú porty pre OS X Windows.
No, ako posledná možnosť (ak nemôžete nainštalovať nič tretej strany), nevzhľadný rozdiel príkazový riadok(predinštalované na systémoch podobných nixu vrátane počítačov Mac a Solaris). Flexibilné. S nastaveniami sa môžete hrať dlho a s nadšením, aby ste mohli zobraziť rozdiely na základe masky (-F), získať porovnanie v obvyklých dvoch stĺpcoch (kláves – vedľa seba) atď. Pre veľké neznáme súbory preferujem výstup v „kontextovom“ formáte, keď sa nezobrazia len zmenené riadky, ale aj tie, ktoré k nim priliehajú.
Na porovnanie viac ako dvoch súborov môže byť vhodný diff3.
Na porovnanie dvoch alebo viacerých súborov v systéme Linux existuje príkaz diff. Dokáže porovnávať jednotlivé súbory aj adresáre. Pozrime sa na syntax, možnosti príkazu diff a niektoré príklady použitia.
syntax príkazu diff
Príkaz diff má nasledujúcu syntax:
Diff [možnosti] súbory-alebo-adresáre
Špecifikujeme možnosti a poskytujeme dva alebo viac súborov alebo adresárov, ktoré potrebujeme porovnať.
možnosti príkazu diff
Pozrime sa na hlavné možnosti príkazu diff. Zvážim len tie možnosti, ktoré používam najčastejšie.
-E | Ignorujte zmeny spôsobené pridaním znaku tabulátora do textu. |
-b | Ignorujte zmeny spôsobené pridaním medzier. |
-w | Ignorujte zmeny, ktoré zahŕňajú pridávanie medzier a tabulátorov. |
-B | ignorovať nové prázdne riadky. |
-p (alebo --show-c-function) | zobraziť názov funkcie jazyka C, v ktorej boli nájdené zmeny. |
-y (alebo --side-by-side) | zobraziť výsledky v dvoch stĺpcoch. |
-r | rekurzívne prehliadať adresáre. |
-SÚBOR X | vylúčiť z vyhľadávania súbory, ktorých názvy sa zhodujú so vzormi v súbore FILE. |
-d (alebo --minimálne) | snažte sa nájsť čo najmenej zmien (to znamená vylúčiť falošne pozitívne). |
Príklady použitia príkazu diff
Porovnanie dvoch textových súborov
Pre jednoduché porovnanie oboch textové súbory s názvami myfile1 a myfile2 vykonajte príkaz v termináli:
Rozdiel môj súbor1 môj súbor2
Je vhodné presmerovať výstup príkazu diff do súboru s príponou diff. Väčšina textových editorov pre Linux, ako napríklad Gedit, rozpoznáva tento súbor a zvýrazní jeho syntax. Ak chcete nasmerovať výsledok porovnania do súboru changes.diff, musíte použiť symbol presmerovania streamu (>):
Diff myfile1 myfile2 > changes.diff
Porovnanie adresárov obsahujúcich textové súbory
Pozrime sa na príklad porovnania dvoch adresárov (mydir1 a mydir2), ktoré obsahujú textové súbory. Hlavným rozdielom oproti vyššie uvedenému príkladu je, že pridáme voľbu -r, čo znamená, že bude rekurzívne prechádzať súbormi v adresároch.
Diff -r mydir1 mydir2 > changes.diff
Teraz predpokladajme, že adresáre, v ktorých porovnávame súbory, obsahujú množstvo „smetí“, ktoré by sme porovnávať nemali. Vytvorme si súbor excludeFiles a zapíšme si do neho vzory a názvy súborov, ktoré by sme nemali porovnávať. Obsah súboru includeFiles môže vyzerať napríklad takto:
*.o ChangeLog* *.bak *.exe
Teraz povedzme príkazu diff, aby použil náš súbor excludeFiles pri porovnávaní adresárov:
Rozdiel -r -X vylučovaťSúbory môj adresár1 môj adresár2 > zmeny.diff
Porovnávame teda súbory, ktorých názvy sa nezhodujú so vzormi v súbore excludeFiles, napríklad vasya.exe alebo ChangeLog12.
Pridajme niekoľko ďalších možností, ktoré sú popísané vyššie, aby sme zlepšili výsledok porovnania:
Rozdiel -rwBd -X vylúčitSúbory mydir1 mydir2 > changes.diff
Porovnávame súbory v adresároch mydir1 a mydir2, pričom ignorujeme zmeny spojené s pridávaním prázdne riadky, medzery, tabulátory a tiež použiť vzory názvov súborov v includeFiles na vylúčenie nepotrebných súborov z porovnávania.
Záver
Ďalšie informácie o používaní príkazu diff vo vašom Linuxový systém môžete ho získať spustením príkazu:
Muž dif
Existujú aj programy, ktoré umožňujú porovnávať súbory pomocou grafického rozhrania. Napríklad program Meld, ktorý vizuálne ukazuje, kde a čo sa v súboroch zmenilo.
), ich porovnania, ako aj porovnania klientov GUI pre nich. Diskutovalo sa aj o IDE pluginoch pre prácu s git a mercurial. Ale prakticky neboli žiadne informácie o vizuálnom porovnávaní a zlučovaní nástrojov riešenia konfliktov.
Nedávno som „preskočil“ z mercurialu (ktorý sa mi stále zdá pohodlnejší a logickejší) na git, pretože drvivá väčšina projektov, ktoré sú pre mňa zaujímavé, používa git a sú hosťované na github. V tejto súvislosti vyvstala otázka revízie arzenálu nástrojov, najmä otázka výber nástroja vizuálne porovnanie a zlúčenie (rozlíšiť a zlúčiť). Aby som doplnil nedostatok informácií o hube, rozhodol som sa napísať túto minirecenziu. Ako sa hovorí - v horúcom prenasledovaní.
Pod rezom nájdete aj príklady nastavení Git na použitie s DiffMerge a WinMerge pod Windows. Myslím, že to ušetrí veľa času.
Meno | Zvláštnosti | Platforma |
KDiff3Git a WinMerge1) Pridať do adresára c:/Git/libexec/git-core/mergetools/winmerge súbor s nasledujúcim obsahom: Diff_cmd () ( "c:/Program Files (x86)/WinMerge/WinMergeU.exe" \ "$LOCAL" "$REMOTE" >/dev/null 2>&1 ) merge_cmd () ( "c:/Program Files (x86) )/WinMerge/WinMergeU.exe" \ "$PWD/$LOCAL" "$PWD/$REMOTE" "$PWD/$MERGED" >/dev/null 2>&1 status=$? ) <<<<<<< HEAD
master str
=======
new str
>>>>>>> nové Tým sa otvorí nástroj obojsmerného zlúčenia: Na základe opísanej logiky prepíšeme príkaz merge merge_cmd takto: 2) Poďme upraviť .gitconfig 3) Vytvorme konflikt pri zlučovaní dvoch vetiev (pozri príklad s použitím DiffMerge). Ak chcete vyriešiť konflikt pri zlučovaní vetiev, použite príkaz |
Dnes som bol požiadaný, aby som porovnal nadpisy malých odsekov v dvoch veľkých textových súboroch. Všetky tituly začínali hviezdičkou, takže neboli žiadne problémy. Ale nie je to vôbec zaujímavé a skôr z nudy ako pre skutočné použitie som chcel nájsť spôsob, ako extrahovať nadpisy z akéhokoľvek textu. Bohužiaľ, 100% pracovná metóda sa nenašla, ale na konci článku bude zaujímavé riešenie, ako zmeniť dvojité alebo viac prázdnych riadkov na jeden prázdny.
Na začiatok je najjednoduchšia možnosť, keď potrebujete porovnať 2 textové súbory.
Existuje na to príkaz diff. Syntax je nasledovná:
diff first_file second_file
Oveľa pohodlnejšie je presmerovať výstup do súboru s príponou diff
rozdiel prvý_súbor druhý_súbor > zisk.rozdiel
Ak sa takýto súbor otvorí v textový editor, syntax sa zvýrazní a proces analýzy bude jednoduchší.
Program porovnáva reťazce a ak jeden zo súborov obsahuje riadok, ktorý nie je v druhom, potom „>“ alebo „
Ak chcete získať výstup riadkov, ktoré začínajú jedným znakom (v tomto prípade je to *), najlepším spôsobom je použiť príkaz grep. Napríklad, ak chcete poslať do súboru 1.txt všetky riadky, ktoré začínajú „*“ v súbore file.txt, potom by ste mali spustiť
grep "^*" "súbor.txt" > 1.txt
Čo sa týka extrakcie nadpisov z textu akéhokoľvek formátu, neprišlo z toho nič rozumné.
Ale nenechajte kód zmiznúť, nechajte ho ležať tu:
#!/bin/bash
n=1 dolár
st=`sed -n '/^$/p' $n| wc -l | awk ‘(tlač $1)’` #počítajte počet prázdnych riadkov
sed -nr ‘/^.(100)/!p’ $n > /tmp/copy2$n #má záujem len o riadky s menej ako 100 znakmi (hlavičky pravdepodobne nebudú dlhšie)
sed -n “1p” /tmp/copy2$n > ‘Hlavičky’$n # Vytiahneme prvý riadok (bude to hlavička)
#
tr 'n' '^' /tmp/copy$n # Zmeňte všetky spojovníky na znak ^
#
#Zmeňte poradie ^^^ (atď.) s dvojitými pomlčkami (výsledkom je prázdny riadok)
#A zmeňte jeden znak ^ na jeden spojovník (bez prázdneho riadku).
sed -i ‘s/^^^^^^^^^^^^^^^^^^/nn/g’ /tmp/copy$n
sed -i ‘s/^^^^^^^^^^^^^^^^^/nn/g’ /tmp/copy$n
sed -i ‘s/^^^^^^^^^^^^^^^^/nn/g’ /tmp/copy$n
sed -i ‘s/^^^^^^^^^^^^^^^/nn/g’ /tmp/copy$n
sed -i ‘s/^^^^^^^^^^^^^^^/nn/g’ /tmp/copy$n
sed -i ‘s/^^^^^^^^^^^^^^/nn/g’ /tmp/copy$n
sed -i ‘s/^^^^^^^^^^^^/nn/g’ /tmp/copy$n
sed -i ‘s/^^^^^^^^^^^/nn/g’ /tmp/copy$n
sed -i ‘s/^^^^^^^^^^/nn/g’ /tmp/copy$n
sed -i ‘s/^^^^^^^^^/nn/g’ /tmp/copy$n
sed -i ‘s/^^^^^^^^/nn/g’ /tmp/copy$n
sed -i ‘s/^^^^^^^/nn/g’ /tmp/copy$n
sed -i ‘s/^^^^^^/nn/g’ /tmp/copy$n
sed -i ‘s/^^^^^/nn/g’ /tmp/copy$n
sed -i ‘s/^^^^/nn/g’ /tmp/copy$n
sed -i ‘s/^^^/nn/g’ /tmp/copy$n
sed -i ‘s/^^/nn/g’ /tmp/copy$n
sed -i ‘s/^/n/g’ /tmp/copy$n
#
pričom [ $st -gt 0 ] #loop toľkokrát, koľkokrát je prázdnych výrazov.
robiť
st=$[$st-1]
sed -i ‘1,/^$/ d’ /tmp/copy$n #zmazať všetky riadky až po prvý prázdny riadok (vrátane seba)
sed -n “1p” /tmp/copy$n >> ‘Hlavičky ‘$n #pridajte zvyšný riadok do súboru
hotovo
Mimochodom, tento kód sa dobre vyrovnal s porovnaním súborov, ktoré mi boli odoslané, ale so skutočnými knihami boli problémy.
IN operačný systém Linux má niekoľko softvérové riešenia na porovnanie vnútorného obsahu dvoch súborov pomocou rôznych metód. Samozrejme, takáto funkcia bude pre webového vývojára neuveriteľne užitočná na porovnanie dvoch textových súborov. Napríklad existujú 2 súbory css štýly, ktoré je potrebné rýchlo porovnať, aby ste v nich našli rozdiely. Alebo si pozrite, čo je nové v aktualizovanom PHP skripte.