Vis endringer sammenligne to linux-filer. Fil - linux gui filsammenligning. Skjuler identiske linjer

Linux-operativsystemet tilbyr flere programvareløsninger for å sammenligne det interne innholdet i to filer ved hjelp av forskjellige metoder. Selvfølgelig vil en slik funksjon være sinnsykt nyttig for en webutvikler å sammenligne to tekstfiler. For eksempel er det 2 css-stilfiler som du raskt må sammenligne for å finne forskjellene. Eller se hva som er nytt i det oppdaterte PHP-skriptet.

Et illustrerende eksempel fra livet:

Så i mitt tilfelle må jeg sammenligne 2 filer bootstrap.css... Sommeren i år fikset jeg noe i stilene til bootstrap.css-filen (som ikke kunne gjøres, fordi du må bruke en egen style.css for tilpassede stilredigeringer). På grunn av denne lille tingen er det problematisk for meg å oppgradere fra versjon 3.3.2 til bootstrap 3.3.5, fordi i en nyere versjon, min oppdaterte CSS-fil, når den erstattes, vil alle redigeringene mine forsvinne og en del av nettstedets design vil "fly av". Med tanke på at det er over 6000 linjer med kode i bootstrap-stilarket, er det helt umulig å forhåndsvise endringene selv.

Sammenlign filer med diff-verktøyet på linux:

For å sammenligne filene `bootstrap.css" og `bootstrap-original.css" (for klarhets skyld, omdøpt den opprinnelige filen ved å legge til prefikset -original til den), skriv inn i terminalen: $ diff bootstrap.css bootstrap-original.css I konsollen fikk vi standarden en rapport om forskjellene i disse filene. Hvis du trenger å automatisk lagre rapporten til en egen fil på disk, send diff-utdata til filen $ diff bootstrap.css bootstrap-original.css> css-modifications.diff Nå vil hele rapporten om filforskjeller bli lagret i filen samme mappe under navnet " css-modifikasjoner.diff". Denne utgangen viser imidlertid ikke veldig tydelig hvor og hva som ble lagt til eller fjernet av meg. For å tydeligere se hvordan de to filene skiller seg, kan du bruke sdiff; Forskjellen med denne pakken er at den ikke genererer en forskjellsrapport. Ved å ordne begge filene i to kolonner, viser den umiddelbart forskjellene i begge filene. `|" markerer linjer som er forskjellige fra hverandre. "" markerer linjer som bare vises i den andre filen.

Kommandosyntaksen ligner på diff-syntaksen:

$ sdiff bootstrap.css bootstrap-original.css Skriv ut forskjellene til konsollen, og med kommandoen: $ sdiff bootstrap.css bootstrap-original.css> css-modifications.diff Skriv hele rapporten i en egen fil. Jeg vil også anbefale å legge til -t-argumentet, for et mer lesbart diff-rapportformat (oppnås ved å justere avstandene mellom tabeller med mellomrom). Ellers vil standardrapporten åpne fint i gedit, men i Sublime vil den "sløre": $ sdiff bootstrap.css bootstrap-original.css> css-modifications.diff -t P.S. mulighetene for å sammenligne filer i Linux slutter ikke der, og du kan til og med sammenligne 3 filer samtidig. For å gjøre dette, bruk kommandoen Bruk diff3 for å sammenligne tre filer samtidig. $ diff3 bootstrap.css bootstrap-original.css bootstrap-3.css> new.diff

Diff genererer vanligvis utdata i følgende format:

$ diff fil1 fil2 2c2< Helllo --- >Hallo

Men det er en spesiell kommandolinjeparameter (-y) som forteller verktøyet å vise dataene i to separate kolonner. Og dette er et eksempel på en slik utgang:

$ diff -y file1 file2 Hei Hei Hei | Hallo bye bye

Åpenbart, når du bruker dette utdataformatet, vil "|" brukes til å markere forskjellige linjer.

5. Skjuler identiske linjer

Hvis du ser nøye på utdataene fra forrige eksempel (fra seksjon 4 ovenfor), vil du finne at når du bruker kommandolinjealternativet -y, vil diff gi ut ikke bare de modifiserte, men også de identiske linjene til filene som behandles. I tilfelle du trenger å fjerne identiske linjer fra utdataene, kan du bruke --suppress-common-lines alternativet.

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

6. Viser navn på C-funksjoner som inneholder modifisert kode

Når du bruker diff for å sammenligne to C-kildefiler, kan et spesielt alternativ (-p) brukes til å fortelle verktøyet å vise navnene på funksjonene der endringer ble funnet. Anta for eksempel at du vil sammenligne følgende to C-kildefiler:

Fil med navnet file1.c:

#inkludere void compare (float x, float y) (hvis (x == y) // feil måte å sammenligne på (printf ("\ n EQUAL \ n");)) int main (void) (sammenlign (1.234, 1.56789); returner 0 ;)

Fil med navnet fil 2:

#inkludere void compare (float x, float y) (hvis (x == y) (printf ("\ n LIK \ n");)) int main (void) (sammenlign (1.234, 1.56789); return 0;)

Dette er resultatet av en normal sammenligning av disse filene:

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

Og dette er resultatet av å sammenligne de samme filene ved å bruke parameteren -p:

$ diff -p fil1.c fil2.c *** fil1.c 2016-12-29 11: 45: 36.587010816 +0530 --- fil2.c 2016-12-29 11: 46: 39.823013074 ****3 +05 *********** *** 2.8 **** void compare (float x, float y) (! If (x == y) // feil måte for sammenligning (printf ("\ n LIKE) \ n ");) --- 2,8 ---- void sammenligning (flytende x, flytende y) (! Hvis (x == y) (printf (" \ n LIK \ n ");)

Selvfølgelig, hvis du bruker kommandolinjealternativet -p, genererer diff mer detaljert utdata, og markerer de endrede linjene med et utropstegn ("!").

7. Rekursiv sammenligning av innholdet i underkataloger

Diff-verktøyet tillater også rekursiv sammenligning av innholdet i underkataloger, men denne driftsmodusen er ikke aktivert som standard. Jeg mente at når du bruker denne kommandoen:

$ diff diff-filer / andre-diff-filer / diff diff-filer / fil1 andre-diff-filer / fil1 1c1< Hi --- >i diff diff-filer / file2 second-diff-filer / file2 2c2< Hello --- >hei

Diff-verktøyet vil bare sammenligne filer fra kataloger på øverste nivå, men hvis parameteren -r brukes (som aktiverer den rekursive filsammenligningsmodusen), vil selv de filene som er i underkataloger bli sammenlignet:

$ diff -r diff-filer / andre-diff-filer / diff -r diff-filer / fil1 andre-diff-filer / fil1 1c1< Hi --- >i diff -r diff-filer / fil2 andre diff-filer / fil2 2c2< Hello --- >ello diff -r diff-filer / more-diff-filer / file1 second-diff-filer / more-diff-filer / file1 1c1< Hi --- >i diff -r diff-filer / more-diff-filer / file2 second-diff-filer / more-diff-filer / file2 2c2< Hello --- >hei

8. Behandle manglende filer som tomme

Diff-verktøyet gir også et alternativ som du kan bruke til å fortelle det om å behandle manglende filer som tomme. Hvis du sammenligner filene som heter fil1 og fil3 (og den siste filen eksisterer ikke), vil diff som standard vise en feilmelding:

$ diff fil1 fil3 diff: fil3: Ingen slik fil eller katalog

Det er ikke noe galt; faktisk er denne oppførselen ganske rimelig. Det er imidlertid tider når du vil unngå å vise feilmeldinger (kanskje når du bruker diff innenfor shell-skript) hvor du kan bruke alternativet -N for å behandle manglende filer som tomme og fortsette å sammenligne filer.

$ diff -N fil1 fil3 1,5d0< Hi < < Helllo < < Bye

Konklusjon

Hvis du leser begge artiklene i serien nøye og uavhengig gjentar alle kommandoeksemplene som er diskutert i dem, er det ganske mulig å si at du har mestret alle de grunnleggende ferdighetene for å jobbe med det aktuelle verktøyet. Selvfølgelig ville vi ikke være i stand til å diskutere alle diff-relaterte problemer innenfor rammen av flere artikler, men ikke desto mindre ble alle hovedfunksjonene og funksjonene til dette verktøyet på en eller annen måte nevnt i dem.

Hvis du vil vite litt mer om dette verktøyet, kan du alltid henvise til man-siden. Unødvendig å si bør du med jevne mellomrom bruke verktøyet med forskjellige sett med parametere for å simulere forskjellige driftssituasjoner.

Det er ofte nødvendig for webansvarlige eller nettstedeiere å sammenligne to filer etter innhold. Denne artikkelen vil vise deg hvordan du sammenligner to filer med hverandre. Den beskriver alle metodene jeg kjenner til for å sammenligne tekstfiler og skript (html, css, php og så videre).

Metode 1. Meld

Meld- et grafisk verktøy for å få forskjeller og slå sammen to filer, to kataloger. Meld er et visuelt verktøy for sammenligning og sammenslåing av filer og kataloger for Linux. Meld retter seg først og fremst mot utviklere. Det kan imidlertid være nyttig for enhver bruker som trenger et godt verktøy for å sammenligne filer og kataloger.

I Meld kan du sammenligne to eller tre filer, eller to eller tre kataloger. Du kan se en arbeidskopi fra populære versjonskontrollsystemer som CVS, Subversion, Bazaar-NG og Mercurial. Meld er tilgjengelig for de fleste Linux-distribusjoner (Ubuntu, Suse, Fedora, etc.), og er tilstede i deres hovedlagre.

# aptitude install meld

Metode 2. Sammenligning av innholdet i to filer i WinMerge-programmet.

Gratisprogrammet WinMerge lar deg sammenligne ikke bare innholdet i filer, det sammenligner også innholdet i hele mapper. WinMerge er et åpen kildekode-sammenlignings- og sammenslåingsverktøy for Windows. WinMerge kan sammenligne både filer og mapper, og viser forskjeller i visuell tekstform som er lett å forstå og håndtere.

Etter installasjonen åpner du menypunktet "Fil" - "Åpne". Velg filer for å sammenligne. For å gjøre dette, klikk på "Bla gjennom"-knappen og velg filen. Etter å ha valgt filene, klikk på "OK"-knappen.

Du kan også redigere filer i WinMerge. Etter å ha lukket sammenligningsvinduet, vil programmet tilby å lagre endringene i filene.

Metode 3.diff

diff er et filsammenligningsverktøy som viser forskjellen mellom to filer.

    For å sammenligne kataloger bruk denne kommandoen: $ diff -qr< current-directory> < backup-directory>

Metode 4. Kompare

Kompare - Viser forskjeller mellom filer. Vet hvordan du sammenligner innholdet i filer eller kataloger, samt oppretter, viser og bruker oppdateringsfiler. Kompare er et grafisk diff-verktøy som lar deg finne forskjeller i filer samt kombinere dem. Den er skrevet i Qt og designet primært for KDE. Her er hovedfunksjonene:

    Støtte for flere diff-formater;

    Støtte sammenligning av linux-filer og kataloger;

    Støtte for visning av diff-filer;

    Tilpassbart grensesnitt;

    Lag og bruk patcher på filer.

Metode 5. Sammenligning av filer i Total Commander

    Støttede operativsystemer: Windows

Total Commander har et verktøy for å sammenligne filer etter innhold, hvor du ikke bare kan sammenligne innhold, men også redigere og kopiere det fra en fil til en annen.

Etter å ha startet Total Commander - i et av panelene velg (Sett inn tast) den første filen for sammenligning - i det andre panelet åpner du mappen med den andre filen og setter markøren på den. Vi kaller programmet for sammenligning: "Filer → Sammenlign etter innhold".

For å gjøre endringer i filen, klikk bare på "Rediger"-knappen. Programmet inkluderer funksjonene for å kopiere og rulle tilbake, søke og endre kodingen. Hvis du har gjort endringer i filen, vil du bli bedt om å lagre endringene etter å ha lukket sammenligningsvinduet.

Metode 6. Sammenligne filer i Notepad ++

    Støttede operativsystemer: Windows, kan kjøres på Linux

Notepad ++ kan ikke sammenligne filer. For at denne funksjonaliteten skal vises i Notepad ++, må du installere "Sammenlign"-plugin.

Start editoren - gå til menypunktet "Plugins" - "Plugin Manager" - "Show Plugin Manager". I det nye vinduet velger du plugin "Sammenlign" og trykker på knappen "Installer".

Etter å ha installert plugin, åpne to filer og velg menyen "Plugins" - "Sammenlign" - "Sammenlign (Alt + D)". Resultatet av filsammenligningen vil bli presentert i separate paneler. Det vil være et varselskilt ved siden av linjene der forskjellene ble funnet.

Metode 7. Sammenligne filer ved hjelp av Windows-kommandolinjen

Sammenligning med Windows-kommandolinjen (cmd.exe) lar deg ikke redigere filer, men du kan ganske enkelt sammenligne innholdet i filene ved å bruke denne metoden.

For å starte Windows-ledeteksten, gå til Start - Alle programmer - Tilbehør - Kommandoprompt, eller trykk Windows-tast + R, skriv inn cmd og trykk Enter.

Ved ledeteksten skriver du inn kommandoen:

fc / N bane til første fil bane til andre fil

), deres sammenligninger og GUI-klientsammenlikninger for dem. Det var også diskusjoner om IDE-plugins for arbeid med git og mercurial. Men praktisk talt det var ingen informasjon om visuell sammenligning og flette konfliktløsningsverktøy.

Jeg "hoppet" nylig fra mercurial (som jeg fortsatt synes er mer praktisk og logisk) til git, fordi de aller fleste prosjekter jeg er interessert i bruker git og er vert på github. I denne forbindelse oppsto spørsmålet om å revidere arsenalet av verktøy, spesielt spørsmålet valg av verktøy visuell sammenligning og sammenslåing (diff og merge). For å bøte på mangelen på informasjon om Habré, bestemte jeg meg for å skrive denne minianmeldelsen. Som de sier - på jakt etter.

Under katten finner du også eksempler på Git-innstillinger for bruk med DiffMerge og WinMerge under Windows. Jeg tror det vil spare mye tid.

Navn Egenskaper Plattform

KDiff3

Git og WinMerge

1) Legg til i katalogen c: / Git / libexec / git-core / mergetools /
en winmerge-fil med følgende innhold:

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 = $?)
Når Git ikke automatisk kan slå sammen endringer, oppstår en flettekonflikt og flettemarkører (<<<<<<<, =======, и >>>>>>>). De er pålagt å løse konflikten ved hjelp av tredjepartsverktøy.
Vurder filen readme.txt som er resultatet av å gjøre en grensammenslåing mester og ny i eksemplet ovenfor:

<<<<<<< HEAD master str ======= new str >>>>>>> ny
Vi kan åpne konfliktfilen ved å bruke WinMerge for å løse konflikten.

Dette vil åpne toveis sammenslåingsverktøyet:

Basert på den beskrevne logikken, vil vi omskrive flettekommandoen merge_cmd på følgende måte:
merge_cmd () ("c: / Program Files (x86) /WinMerge/WinMergeU.exe" \ "$ MERGED"> / dev / null 2> & 1 status = $?)
Faktisk er begge de ovennevnte alternativene likeverdige.

2) La oss redigere .gitconfig
tool = winmerge cmd = "winmerge" tool = winmerge cmd = "winmerge" trustExitCode = false keepBackup = false
den siste linjen avbryter lagring av sikkerhetskopifiler i depotkatalogen.

3) La oss skape en konflikt når du slår sammen to grener (se eksempel ved bruk av DiffMerge).
git difftool master new // sammenligne de to grenene

For å løse konflikten når du slår sammen grener, bruk kommandoen
git mergetool

For å sammenligne to eller flere filer har Linux en diff-kommando. Den kan sammenligne både individuelle filer og kataloger. La oss ta en titt på syntaksen, alternativene for diff-kommandoen og noen brukseksempler.

Diff kommandosyntaks

Diff-kommandoen har følgende syntaks:

Diff [alternativer] filer-eller-kataloger

Vi spesifiserer alternativer og legger inn to eller flere filer eller kataloger som vi trenger å sammenligne.

Diff-kommandoalternativer

La oss ta en titt på hovedalternativene til diff-kommandoen. Jeg vil kun dekke de alternativene jeg selv bruker mest.

-Eignorere endringer knyttet til tillegg av et tabulatortegn i teksten.
-bignorere endringer knyttet til å legge til mellomrom.
-wignorere endringer knyttet til tillegg av mellomrom og tabulatorer.
-Bignorere nye tomme linjer.
-p (eller —show-c-function)vis navnet på C-språkfunksjonen der endringene ble funnet.
-y (eller -side-by-side)vis resultatene i to kolonner.
-rbla gjennom kataloger rekursivt.
-X FILekskluder fra søkefiler hvis navn samsvarer med mønstrene i FILE-filen.
-d (eller -minimal)prøv å finne så få endringer som mulig (det vil si eliminere falske positive).

Eksempler på bruk av diff-kommandoen

Sammenligning av to tekstfiler

For en enkel sammenligning av to tekstfiler kalt minfil1 og minfil2, kjør kommandoen i terminalen:

Diff minfil1 minfil2

Det er praktisk å omdirigere utdataene fra diff-kommandoen til en fil med diff-utvidelsen. De fleste tekstredigerere i Linux, som Gedit, gjenkjenner denne filen og fremhever dens syntaks. For å sende sammenligningsresultatet til change.diff-filen, må du bruke strømomdirigeringssymbolet (>):

Diff minfil1 minfil2> endringer.diff

Sammenligning av kataloger som inneholder tekstfiler

La oss se på et eksempel på å sammenligne to kataloger (mydir1 og mydir2) som inneholder tekstfiler. Hovedforskjellen her fra eksemplet ovenfor er at vi legger til alternativet -r for å rekursivt krysse filer i kataloger.

Diff -r mydir1 mindir2> endringer.diff

Anta nå at det er mye søppel i katalogene der vi sammenligner filer som vi ikke bør sammenligne. La oss lage en fil excludeFiles og skrive i den maler og filnavn som vi ikke bør sammenligne. For eksempel kan innholdet i excludeFiles se slik ut:

* .o ChangeLog * * .bak * .exe

Nå forteller vi diff-kommandoen å bruke våre excludeFiles når du sammenligner kataloger:

Diff -r -X excludeFiles mydir1 mindir2> endringer.diff

Derfor sammenligner vi filer hvis navn ikke samsvarer med mønstrene i excludeFiles-filen, for eksempel vasya.exe eller ChangeLog12.

La oss legge til noen flere alternativer, som er beskrevet ovenfor, for å forbedre sammenligningsresultatet:

Diff -rwBd -X excludeFiles mydir1 mydir2> endringer.diff

Vi sammenligner filer i katalogene mydir1 og mydir2, ignorerer endringer knyttet til tilføyelse av tomme linjer, mellomrom, tabulatorer, og bruker også filnavnmønstre i excludeFiles for å ekskludere unødvendige filer fra sammenligning.

Konklusjon

Du kan få mer informasjon om bruk av diff-kommandoen på Linux-systemet ditt ved å kjøre kommandoen:

Mann diff

Det finnes også programmer som lar deg sammenligne filer ved hjelp av et grafisk grensesnitt. For eksempel programmet Meld, som tydelig viser hvor og hva som er endret i filene.