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.diffDiff 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
Fil med navnet fil 2:
#inkludere
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 meldMetode 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 |
KDiff3Git og WinMerge1) 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 = $?) <<<<<<< HEAD
master str
=======
new str
>>>>>>> ny Dette vil åpne toveis sammenslåingsverktøyet: Basert på den beskrevne logikken, vil vi omskrive flettekommandoen merge_cmd på følgende måte: 2) La oss redigere .gitconfig 3) La oss skape en konflikt når du slår sammen to grener (se eksempel ved bruk av DiffMerge). For å løse konflikten når du slår sammen grener, bruk kommandoen |
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.
-E | ignorere endringer knyttet til tillegg av et tabulatortegn i teksten. |
-b | ignorere endringer knyttet til å legge til mellomrom. |
-w | ignorere endringer knyttet til tillegg av mellomrom og tabulatorer. |
-B | ignorere 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. |
-r | bla gjennom kataloger rekursivt. |
-X FIL | ekskluder 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.