Toon wijzigingen vergelijk twee bestanden linux. Bestand - linux-bestandsvergelijking gui. Identieke rijen verbergen

Het Linux-besturingssysteem heeft verschillende softwareoplossingen om de interne inhoud van twee bestanden op verschillende manieren te vergelijken. Natuurlijk zal zo'n functie waanzinnig handig zijn voor een webontwikkelaar om twee tekstbestanden te vergelijken. Er zijn bijvoorbeeld 2 css-bestanden die u snel moet vergelijken om te zien of ze verschillen. Of kijk wat er nieuw is in het bijgewerkte PHP-script.

Een goed voorbeeld uit het leven:

Dus in mijn geval moet ik 2 bestanden vergelijken bootstrap.css. Deze zomer heb ik iets gerepareerd in de stijlen van het bootstrap.css-bestand (wat onmogelijk was omdat je een aparte style.css moet gebruiken voor aangepaste stijlbewerkingen). Vanwege dit kleine ding is het voor mij problematisch om te upgraden van versie 3.3.2 naar bootstrap 3.3.5, omdat. de nieuwere versie heeft zijn eigen bijgewerkte CSS-bestand, bij het vervangen ervan gaan al mijn bewerkingen verloren en zal een deel van het website-ontwerp "wegvliegen". Met meer dan 6.000 regels code in de bootstrap-stylesheet is het absoluut onmogelijk om de wijzigingen zelf te zien.

Vergelijk bestanden met het diff-hulpprogramma in linux:

Om de bestanden `bootstrap.css' en `bootstrap-original.css' te vergelijken (voor de duidelijkheid heb ik het originele bestand hernoemd door er het voorvoegsel -original aan toe te voegen), typ je in de terminal: $ diff bootstrap.css bootstrap-original. css In de console hebben we het standaardrapport gekregen over de verschillen in deze bestanden. Als u het rapport automatisch naar een apart bestand op schijf moet opslaan, sturen we de uitvoer van diff-resultaten naar het bestand $ diff bootstrap.css bootstrap-original.css > css-modifications.diff Nu wordt het volledige bestandsverschilrapport opgeslagen in dezelfde map onder de naam " css-modificaties.diff". Deze uitvoer laat echter niet erg duidelijk zien waar en wat door mij is toegevoegd of verwijderd. Om duidelijker te zien hoe de twee bestanden van elkaar verschillen, kunt u sdiff; Het verschil met dit pakket is dat het geen diff-rapport genereert. Door beide bestanden in twee kolommen te plaatsen, worden direct de verschillen in beide bestanden zichtbaar. `|' markeert regels die anders zijn `' markeert regels die alleen in het tweede bestand voorkomen.

De opdrachtsyntaxis is vergelijkbaar met de diff-syntaxis:

$ sdiff bootstrap.css bootstrap-original.css Toon de verschillen in de console, en gebruik het commando: $ sdiff bootstrap.css bootstrap-original.css > сss-modifications.diff Schrijf het volledige rapport in een apart bestand. Ik zou ook adviseren het argument -t toe te voegen, voor een beter leesbaar diff-rapportformaat (bereikt door de afstanden tussen tabellen gelijk te maken met spaties). Anders zal in gedit het standaardrapport prima openen, maar in Sublime zal het "vervagen": $ sdiff bootstrap.css bootstrap-original.css > сss-modifications.diff -t PS De mogelijkheden om bestanden in Linux te vergelijken houden daar niet op en je kunt zelfs 3 bestanden tegelijk vergelijken. Gebruik hiervoor het commando Gebruik diff3 om drie bestanden tegelijk te vergelijken. $ diff3 bootstrap.css bootstrap-origineel.css bootstrap-3.css > nieuw.diff

Meestal genereert diff uitvoer in het volgende formaat:

$ diff bestand1 bestand2 2c2< Helllo --- >Hallo

Maar er is een speciale opdrachtregeloptie (-y) die het hulpprogramma vertelt om gegevens in twee afzonderlijke kolommen uit te voeren. En dit is een voorbeeld van een dergelijke uitvoer:

$ diff -y bestand1 bestand2 Hallo Hallo Hallo | hallo doei doei

Het is duidelijk dat bij gebruik van dit uitvoerformaat het symbool "|" gebruikt om verschillende tekenreeksen te markeren.

5. Identieke rijen verbergen

Als je de uitvoer van het vorige voorbeeld (van sectie 4 hierboven) nauwkeurig bekijkt, zul je zien dat wanneer je de -y opdrachtregeloptie gebruikt, het hulpprogramma diff niet alleen gewijzigde regels uitvoert, maar ook identieke regels van de bestanden die worden verwerkt. Als u identieke regels uit de uitvoer wilt verwijderen, kunt u de optie --suppress-common-lines gebruiken.

$ diff -y --suppress-common-lines file1 file2 Hallo | Hallo

6. De namen van C-taalfuncties weergeven die gewijzigde code bevatten

Wanneer het hulpprogramma diff wordt gebruikt om twee C-bronbestanden te vergelijken, kan een speciale optie (-p) worden gebruikt om het hulpprogramma te laten weten de namen van functies waarvan de code is gewijzigd, weer te geven. Stel dat u bijvoorbeeld de volgende twee C-bronbestanden wilt vergelijken:

Bestand met de naam file1.c:

#erbij betrekken void Compare(float x, float y) ( if(x == y) // incorrecte vergelijkingsmethode ( printf("\n EQUAL \n"); ) ) int main(void) ( Compare(1.234, 1.56789); return 0 ;)

Bestand met de naam bestand2:

#erbij betrekken void Compare(float x, float y) ( if(x == y) ( printf("\n EQUAL \n"); ) ) int main(void) ( Compare(1.234, 1.56789); return 0; )

Dit is het resultaat van een normale vergelijking van deze bestanden:

$ diff bestand1.c bestand2.c 5c5< if(x == y) // некорректный способ сравнения --- >als(x == y)

En dit is het resultaat van het vergelijken van dezelfde bestanden met behulp van de -p optie:

$ diff -p bestand1.c bestand2.c *** bestand1.c 2016-12-29 11:45:36.587010816 +0530 --- bestand2.c 2016-12-29 11:46:39.823013274 +0530 **** *********** *** 2,8 **** void vergelijk(float x, float y) ( ! if(x == y) // onjuiste vergelijkingsmethode ( printf("\n GELIJK \n"); ) --- 2,8 ---- void vergelijk(float x, float y) ( ! if(x == y) ( printf("\n EQUAL \n"); )

Wanneer de opdrachtregeloptie -p wordt gebruikt, genereert diff uiteraard meer uitgebreide uitvoer, waarbij gewijzigde regels worden gemarkeerd met een uitroepteken ("!").

7. Recursieve vergelijking van de inhoud van submappen

Met het hulpprogramma diff kunt u ook recursief de inhoud van submappen vergelijken, maar deze werkwijze is standaard niet ingeschakeld. Ik bedoelde dat bij het gebruik van dit commando:

$ diff diff-bestanden/ tweede-diff-bestanden/ diff diff-bestanden/bestand1 tweede-diff-bestanden/bestand1 1c1< Hi --- >i diff diff-files/file2 second-diff-files/file2 2c2< Hello --- >hallo

het hulpprogramma diff vergelijkt alleen bestanden van mappen op het hoogste niveau, maar als u de optie -r gebruikt (die de recursieve bestandsvergelijkingsmodus activeert), worden zelfs die bestanden die in submappen staan ​​vergeleken:

$ diff -r diff-bestanden/ tweede-diff-bestanden/ diff -r diff-bestanden/bestand1 tweede-diff-bestanden/bestand1 1c1< Hi --- >i diff -r diff-files/file2 second-diff-files/file2 2c2< Hello --- >ello diff -r diff-bestanden/meer-diff-bestanden/bestand1 tweede-diff-bestanden/meer-diff-bestanden/bestand1 1c1< Hi --- >i diff -r diff-bestanden/meer-diff-bestanden/bestand2 tweede-diff-bestanden/meer-diff-bestanden/bestand2 2c2< Hello --- >hallo

8. Ontbrekende bestanden als leeg behandelen

Het hulpprogramma diff biedt ook een optie waarmee u kunt aangeven dat ontbrekende bestanden als leeg moeten worden behandeld. Als je bestanden met de naam file1 en file3 vergelijkt (en het laatste bestand bestaat niet), zal diff standaard een foutmelding geven:

$ diff bestand1 bestand3 diff: bestand3: Geen dergelijk bestand of map

Er is niets mis; in feite is dit gedrag heel redelijk. Maar er zijn momenten waarop je foutmeldingen moet vermijden (misschien wanneer je diff gebruikt als onderdeel van een shellscript) waarin je de -N optie kunt gebruiken om ontbrekende bestanden als leeg te behandelen en door te gaan met het vergelijken van bestanden.

$ diff -N bestand1 bestand3 1.5d0< Hi < < Helllo < < Bye

Gevolgtrekking

Als je beide artikelen in de serie aandachtig hebt gelezen en onafhankelijk alle voorbeeldopdrachten hebt herhaald die erin worden overwogen, dan is het heel goed mogelijk om te zeggen dat je alle basisvaardigheden van het werken met het betreffende hulpprogramma onder de knie hebt. Natuurlijk konden we niet alle problemen met betrekking tot diff bespreken in het kader van verschillende artikelen, maar desalniettemin werden alle belangrijke kenmerken en functies van dit hulpprogramma op de een of andere manier erin genoemd.

Als u iets meer wilt weten over dit hulpprogramma, kunt u altijd de handleiding raadplegen. Ik denk niet dat het de moeite waard is om te vermelden dat je het hulpprogramma periodiek moet gebruiken met verschillende sets parameters om verschillende werksituaties te simuleren.

Webmasters of site-eigenaren moeten vaak twee bestanden vergelijken op inhoud. In dit artikel wordt uitgelegd hoe u twee bestanden kunt vergelijken. Alle mij bekende methoden voor het vergelijken van tekstbestanden en scripts (html, css, php, enzovoort) worden hier beschreven.

Methode 1 Meld

versmelten- een grafisch hulpmiddel voor het verkrijgen van verschillen en het samenvoegen van twee bestanden, twee mappen. Meld is een visueel hulpmiddel voor het vergelijken en samenvoegen van bestanden en mappen voor Linux. Meld is voornamelijk gericht op ontwikkelaars. Het kan echter nuttig zijn voor elke gebruiker die een goed hulpmiddel nodig heeft om bestanden en mappen te vergelijken.

In Meld kunt u twee of drie bestanden of twee of drie mappen vergelijken. U kunt uw werkkopie bekijken vanuit populaire versiebeheersystemen zoals CVS, Subversion, Bazaar-NG en Mercurial. Meld is beschikbaar voor de meeste Linux-distributies (Ubuntu, Suse, Fedora, enz.) en is aanwezig in hun belangrijkste repositories.

# aptitude install meld

Methode 2: De inhoud van twee bestanden vergelijken in WinMerge.

Met het gratis programma WinMerge kun je niet alleen de inhoud van bestanden vergelijken, maar ook de inhoud van hele mappen. WinMerge is een Open Source diff en merge tool voor Windows. WinMerge kan zowel bestanden als mappen vergelijken en de verschillen weergeven in visuele tekstvorm die gemakkelijk te begrijpen en te verwerken is.

Open na de installatie het menu-item "Bestand" - "Open". Selecteer bestanden om te vergelijken. Klik hiervoor op de knop "Bladeren" en selecteer het bestand. Klik na het selecteren van de bestanden op de knop "OK".

U kunt ook bestanden bewerken in WinMerge. Na het sluiten van het vergelijkingsvenster zal het programma u vragen om de wijzigingen in de bestanden op te slaan.

Methode 3. verschil

verschil- een hulpprogramma voor het vergelijken van bestanden dat het verschil tussen twee bestanden weergeeft.

    Gebruik deze opdracht om mappen te vergelijken: $ diff -qr< current-directory> < backup-directory>

Methode 4Vergelijken

Kompar - toont verschillen tussen bestanden. Kan de inhoud van bestanden of mappen vergelijken en patchbestanden maken, weergeven en toepassen. Kompare is een grafisch diff-hulpprogramma waarmee u verschillen in bestanden kunt vinden en ze kunt samenvoegen. Geschreven in Qt en voornamelijk ontworpen voor KDE. Dit zijn de belangrijkste kenmerken:

    Ondersteuning voor meerdere diff-formaten;

    Ondersteuning voor het vergelijken van linux-bestanden en mappen;

    Ondersteuning voor het bekijken van diff-bestanden;

    Aanpasbare interface;

    Patches maken en toepassen op bestanden.

Methode 5. Bestanden vergelijken in Total Commander

    Ondersteunde besturingssystemen: Windows

Total Commander heeft een bestandsvergelijkingstool op inhoud, waar u niet alleen inhoud kunt vergelijken, maar ook kunt bewerken en kopiëren van het ene bestand naar het andere.

Na het starten van Total Commander - in een van de panelen selecteer (Insert key) het eerste bestand ter vergelijking - open in het tweede paneel de map met het tweede bestand en plaats de cursor erop. We noemen het programma ter vergelijking: "Bestanden → Vergelijken op inhoud".

Om wijzigingen in het bestand aan te brengen, klikt u op de knop "Bewerken". Het programma heeft de functies kopiëren en terugdraaien, zoeken en wijzigen van de codering. Als u wijzigingen in het bestand hebt aangebracht, wordt u na het sluiten van het vergelijkingsvenster gevraagd om de wijzigingen op te slaan.

Methode 6: Bestanden vergelijken in Kladblok++

    Ondersteunde besturingssystemen: Windows, kan op Linux draaien

Notepad++ kan geen bestanden vergelijken. Om deze functionaliteit in Notepad ++ te laten verschijnen, moet u de plug-in "Vergelijken" installeren.

Start de editor - ga naar het menu-item "Plugins" - "Plugin Manager" - "Show Plugin Manager". Selecteer in het nieuwe venster de plug-in "Vergelijken" en klik op de knop "Installeren".

Open na het installeren van de plug-in de twee bestanden en selecteer het menu "Plugins" - "Vergelijk" - "Vergelijk (Alt + D)". Het resultaat van de bestandsvergelijking wordt in afzonderlijke panelen gepresenteerd. Lijnen waar verschillen worden gevonden, hebben een waarschuwingsbord ernaast.

Methode 7: Bestanden vergelijken met behulp van de Windows-opdrachtregel

Vergelijking met behulp van de Windows-opdrachtregel (cmd.exe) staat u niet toe om bestanden te bewerken, maar u kunt eenvoudig de inhoud van bestanden vergelijken met deze methode.

Om de Windows-opdrachtregel op te roepen, gaat u naar "Start" - "Alle programma's" - "Accessoires" - "Opdrachtprompt" of drukt u op de toetsen "Windows + R", typt u cmd en drukt u op Enter.

Voer op de opdrachtregel de opdracht in:

fc / N pad naar eerste bestand pad naar tweede bestand

), hun vergelijkingen, evenals vergelijkingen van GUI-clients voor hen. Er waren ook discussies over IDE-plug-ins voor het werken met git en mercurial. Maar praktisch er was geen informatie over tools voor visuele vergelijking en het oplossen van samenvoegconflicten.

Ik ben onlangs "gesprongen" van mercurial (wat ik nog steeds handiger en logischer vind) naar git, omdat de overgrote meerderheid van de projecten waarin ik geïnteresseerd ben git gebruikt en op github wordt gehost. In dit verband rees de vraag om het arsenaal aan hulpmiddelen te herzien, met name de vraag: gereedschap selectie visuele vergelijking en samenvoegen (diff en samenvoegen). Om het gebrek aan informatie over Habré goed te maken, besloot ik deze mini-review te schrijven. Zoals ze zeggen - in de achtervolging.

Onder de cut vindt u ook voorbeelden van Git-instellingen voor gebruik met DiffMerge en WinMerge op Windows. Ik denk dat het veel tijd gaat besparen.

Naam Eigenaardigheden Platform

KDiff3

Git en WinMerge

1) Toevoegen aan map c:/git/libexec/git-core/mergetools/
winmerge-bestand met de volgende inhoud:

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=$? )
Wanneer Git wijzigingen niet automatisch kan samenvoegen, treedt er een samenvoegconflict op en worden samenvoegmarkeringen toegevoegd aan het conflicterende bestand (<<<<<<<, =======, и >>>>>>>). Ze zijn nodig om het conflict op te lossen met behulp van tools van derden.
Overweeg een bestand leesmij.txt die wordt gevormd als gevolg van het samenvoegen van takken meester en nieuw in bovenstaand voorbeeld:

<<<<<<< HEAD master str ======= new str >>>>>>> nieuw
We kunnen het conflictbestand openen met WinMerge om het conflict op te lossen.

Dit opent de tool voor het in twee richtingen samenvoegen:

Op basis van de beschreven logica zullen we het samenvoegcommando herschrijven merge_cmd op de volgende manier:
merge_cmd () ( "c:/Program Files (x86)/WinMerge/WinMergeU.exe" \ "$MERGED" >/dev/null 2>&1 status=$? )
In wezen zijn beide opties gelijkwaardig.

2) Bewerken .gitconfig
tool=winmerge cmd="winmerge" tool=winmerge cmd="winmerge" trustExitCode=false keepBackup=false
De laatste regel annuleert het opslaan van de back-upbestanden in de repositorymap.

3) Laten we een conflict creëren bij het samenvoegen van twee branches (zie een voorbeeld met DiffMerge).
git difftool master nieuw // vergelijk twee branches

Om het conflict bij het samenvoegen van branches op te lossen, gebruik je het commando
git merge tool

Om twee of meer bestanden te vergelijken, heeft Linux de opdracht diff. Het kan zowel individuele bestanden als mappen vergelijken. Laten we eens kijken naar de syntaxis, opties voor de opdracht diff en enkele gebruiksvoorbeelden.

diff opdrachtsyntaxis

De opdracht diff heeft de volgende syntaxis:

Diff [opties] bestanden-of-mappen

We specificeren opties en voeren twee of meer bestanden of mappen in die we moeten vergelijken.

diff commando opties

Overweeg de belangrijkste opties van het diff-commando. Ik zal alleen die opties overwegen die ik zelf het vaakst gebruik.

-Enegeer wijzigingen die zijn gekoppeld aan het toevoegen van een tabteken in de tekst.
-Bnegeer wijzigingen met betrekking tot het toevoegen van spaties.
-wnegeer wijzigingen met betrekking tot het toevoegen van spaties en tabbladen.
-Bnegeer nieuwe lege regels.
-p (of --show-c-functie)toon de naam van de C-taalfunctie waarin de wijzigingen zijn gevonden.
-y (of --naast elkaar)resultaten in twee kolommen weergeven.
-Rdoor mappen recursief bladeren.
-X BESTANDUitsluiten van de zoekbestanden waarvan de namen overeenkomen met de patronen in het FILE-bestand.
-d (of --minimaal)probeer zo min mogelijk veranderingen te vinden (dat wil zeggen, elimineer valse positieven).

Voorbeelden van het gebruik van de opdracht diff

Twee tekstbestanden vergelijken

Voor een eenvoudige vergelijking van twee tekstbestanden genaamd myfile1 en myfile2, voert u de opdracht in de terminal uit:

Diff mijnbestand1 mijnbestand2

Het is handig om de uitvoer van het diff-commando om te leiden naar een bestand met de extensie diff . De meeste Linux-teksteditors, zoals Gedit, herkennen dit bestand en markeren de syntaxis ervan. Om het resultaat van de vergelijking naar het bestand changes.diff te sturen, moet u het stream-omleidingssymbool (>) gebruiken:

Diff mijnbestand1 mijnbestand2 > changes.diff

Vergelijking van mappen die tekstbestanden bevatten

Overweeg een voorbeeld van het vergelijken van twee mappen (mydir1 en mydir2) die tekstbestanden bevatten. Het belangrijkste verschil hier met het bovenstaande voorbeeld is dat we de optie -r zullen toevoegen, wat betekent dat bestanden recursief in mappen moeten worden doorkruist.

Diff -r mijndir1 mijndir2 > changes.diff

Stel nu dat de mappen waarin we bestanden vergelijken veel "rommel" bevatten die we niet zouden moeten vergelijken. Laten we een ExcludeFiles-bestand maken en daarin de patronen en bestandsnamen schrijven die we niet zouden moeten vergelijken. De inhoud van includeFiles kan er bijvoorbeeld als volgt uitzien:

*.o ChangeLog* *.bak *.exe

Laten we nu de opdracht diff vertellen om ons bestand includefiles te gebruiken bij het vergelijken van mappen:

Diff -r -X includeFiles mijndir1 mijndir2 > changes.diff

We vergelijken dus bestanden waarvan de namen niet overeenkomen met de patronen in het bestand includeFiles, bijvoorbeeld vasya.exe of ChangeLog12.

Laten we nog een paar opties toevoegen, die hierboven zijn beschreven, om het resultaat van de vergelijking te verbeteren:

Diff -rwBd -X includeFiles mydir1 mydir2 > changes.diff

We vergelijken bestanden in de mappen mydir1 en mydir2 en negeren wijzigingen met betrekking tot de toevoeging van lege regels, spaties, tabbladen en gebruiken bestandsnaampatronen in includeFiles om onnodige bestanden uit te sluiten van de vergelijking.

Gevolgtrekking

U kunt meer informatie krijgen over het gebruik van de opdracht diff op uw Linux-systeem door de opdracht uit te voeren:

man verschil

Er zijn ook programma's waarmee u bestanden kunt vergelijken via een grafische interface. Bijvoorbeeld het programma Meld, dat visueel laat zien waar en wat er is veranderd in de bestanden.