Vis ændringer sammenlign to linux-filer. Filer - linux fil sammenligning gui. Skjuler identiske rækker

Linux-operativsystemet har flere softwareløsninger til at sammenligne det interne indhold af to filer ved hjælp af forskellige metoder. Selvfølgelig vil en sådan funktion være utrolig nyttig for en webudvikler til at sammenligne to tekstfiler. For eksempel er der 2 css-stilfiler, som du hurtigt skal sammenligne for at finde forskellene. Eller se, hvad der er nyt i det opdaterede PHP-script.

Et tydeligt eksempel fra livet:

Så i mit tilfælde er jeg nødt til at sammenligne 2 filer bootstrap.css. I sommers rettede jeg noget i stilene i bootstrap.css-filen (hvilket ikke kunne lade sig gøre, fordi du skal bruge en separat style.css til redigering af tilpasset stil). På grund af denne lille ting er det problematisk for mig at opgradere fra version 3.3.2 til bootstrap 3.3.5, fordi... den nyere version har sin egen opdaterede CSS-fil, når den udskiftes, forsvinder alle mine redigeringer og en del af hjemmesidens design vil "flyve af sted". I betragtning af at der er mere end 6000 linjer kode i bootstrap-stilfilen, er det absolut umuligt at se ændringerne selv.

Sammenligning af filer med diff-værktøjet i Linux:

For at sammenligne filerne `bootstrap.css" og `bootstrap-original.css" (for klarhedens skyld omdøbte jeg den originale fil, tilføjede præfikset -original til den), indtast i terminalen: $ diff bootstrap.css bootstrap-original. css I konsollen modtog vi standardrapporten om forskellene i disse filer. Hvis du automatisk skal gemme rapporten til en separat fil på disken, så send outputtet af diff-resultaterne til filen $ diff bootstrap.css bootstrap-original.css > сss-modifications.diff Nu bliver hele rapporten om filforskelle gemt i samme mappe under navnet " сss-modifikationer.diff"Dette output viser dog ikke tydeligt, hvor og hvad der blev tilføjet eller fjernet af mig. For mere tydeligt at se, hvordan de to filer adskiller sig, kan du bruge sdiff; Forskellen med denne pakke er, at den ikke genererer en forskelsrapport. Ved at arrangere begge filer i to kolonner, viser den straks forskellene i begge filer. `|" markerer linjer, der adskiller sig fra hinanden `" fremhæver linjer, der kun vises i den anden fil.

Kommandosyntaksen ligner diff:

$ sdiff bootstrap.css bootstrap-original.css Vi udsender forskellene til konsollen, og med kommandoen: $ sdiff bootstrap.css bootstrap-original.css > сss-modifications.diff Vi skriver hele rapporten i en separat fil. Jeg vil også anbefale at tilføje -t-argumentet for et mere læsbart diff-rapportformat (opnået ved at justere afstandene mellem tabeller med mellemrum). Ellers åbner standardrapporten fint i gedit, men i Sublime vil den "sløre": $ sdiff bootstrap.css bootstrap-original.css > сss-modifications.diff -t P.S. Mulighederne for at sammenligne filer i Linux slutter ikke der, og du kan endda sammenligne 3 filer på samme tid. For at gøre dette skal du bruge kommandoen For at sammenligne tre filer på én gang, brug diff3. $ diff3 bootstrap.css bootstrap-original.css bootstrap-3.css > new.diff

Typisk vil diff generere output i følgende format:

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

Men der er en speciel kommandolinjeparameter (-y), der fortæller værktøjet at udlæse data i to separate kolonner. Og dette er et eksempel på et sådant output:

$ diff -y file1 file2 Hej Hej Hej | Hej farvel

Naturligvis, når du bruger dette output-format, tegnet "|". bruges til at markere forskellige linjer.

5. Skjul identiske rækker

Hvis du ser nøje på outputtet fra det foregående eksempel (fra afsnit 4 ovenfor), vil du opdage, at når du bruger kommandolinjeindstillingen -y, udsender diff-værktøjet ikke kun de ændrede linjer, men også de identiske linjer i filerne det behandler. Hvis du har brug for at fjerne identiske linjer fra outputtet, kan du bruge --suppress-common-lines muligheden.

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

6. Udskrivning af navne på C-sprogfunktioner, der indeholder ændret kode

Når du bruger diff-værktøjet til at sammenligne to C-kildekodefiler, kan du bruge en speciel mulighed (-p), der fortæller værktøjet at udskrive navnene på funktioner, hvor ændringer blev registreret. Antag for eksempel, at du vil sammenligne følgende to C-kildekodefiler:

Fil med navnet file1.c:

#omfatte void compare(float x, float y) ( if(x == y) // forkert måde at sammenligne på ( printf("\n ER LIGE med \n"); ) ) int main(void) ( compare(1.234, 1.56789 ); return 0;

Fil med navnet fil 2:

#omfatte void compare(float x, float y) ( if(x == y) ( printf("\n ER LIGE med \n"); ) ) int main(void) ( compare(1.234, 1.56789); return 0; )

Dette er resultatet af en normal sammenligning af disse filer:

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

Og dette er resultatet af at sammenligne de samme filer ved hjælp af 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.823013274 +0530 **** *********** *** 2.8 **** void compare(float x, float y) ( ! if(x == y) // forkert måde at sammenligne på ( printf("\n ER LIGE med \n"); ) --- 2,8 ---- void compare(float x, float y) ( ! if(x == y) ( printf("\n ER LIGE med \n"); )

Det er klart, hvis kommandolinjeindstillingen -p bruges, genererer diff mere detaljeret output, der markerer modificerede linjer med et udråbstegn ("!").

7. Rekursiv sammenligning af indholdet af undermapper

Diff-værktøjet giver dig også mulighed for rekursivt at sammenligne indholdet af undermapper, men denne driftstilstand er ikke aktiveret som standard. Jeg mente, at når du brugte denne kommando:

$ diff diff-filer/ second-diff-filer/ diff diff-filer/fil1 second-diff-filer/fil1 1c1< Hi --- >i diff diff-filer/fil2 second-diff-filer/fil2 2c2< Hello --- >hej

Diff-værktøjet vil kun sammenligne filer fra mapper på øverste niveau, men hvis du bruger parameteren -r (aktiverer den rekursive filsammenligningstilstand), vil den sammenligne selv de filer, der er placeret i undermapper:

$ diff -r diff-filer/ second-diff-filer/ diff -r diff-filer/fil1 second-diff-filer/fil1 1c1< Hi --- >i diff -r diff-filer/fil2 second-diff-filer/fil2 2c2< Hello --- >ello diff -r diff-filer/more-diff-filer/fil1 second-diff-filer/flere-diff-filer/fil1 1c1< Hi --- >i diff -r diff-filer/more-diff-filer/fil2 second-diff-filer/flere-diff-filer/fil2 2c2< Hello --- >hej

8. Behandl manglende filer som tomme

Diff-værktøjet understøtter også en mulighed, hvor du kan bede den behandle manglende filer som tomme. Hvis du sammenligner filer med navnet fil1 og fil3 (og sidstnævnte fil eksisterer ikke), vil diff som standard udsende en fejlmeddelelse:

$ diff fil1 fil3 diff: fil3: Ingen sådan fil eller mappe

Der er intet galt; faktisk er denne adfærd fuldstændig berettiget. Men der er tidspunkter, hvor du vil undgå fejlmeddelelser (måske når du bruger diff i shell-scripts), hvor du kan bruge -N-indstillingen til at behandle manglende filer som tomme og fortsætte med at sammenligne filer.

$ diff -N fil1 fil3 1.5d0< Hi < < Helllo < < Bye

Konklusion

Hvis du omhyggeligt har læst begge artikler i serien og selvstændigt gentaget alle kommandoeksemplerne, der er diskuteret i dem, så er det meget muligt at sige, at du har mestret alle de grundlæggende færdigheder i at arbejde med det pågældende værktøj. Selvfølgelig kunne vi ikke diskutere alle spørgsmål relateret til diff i flere artikler, men ikke desto mindre blev alle hovedfunktionerne og funktionerne i dette værktøj nævnt i dem på en eller anden måde.

Hvis du vil vide lidt mere om dette værktøj, kan du altid henvise til dets manualside. Jeg synes ikke det er værd at nævne endnu en gang, at du med jævne mellemrum skal bruge værktøjet med forskellige sæt parametre til at simulere forskellige arbejdssituationer.

Webmastere eller webstedsejere har ofte brug for at sammenligne to filer baseret på indhold. Fra denne artikel lærer du, hvordan du sammenligner to filer med hinanden. Alle metoder, jeg kender til at sammenligne tekstfiler og scripts (html, css, php, og så videre) er beskrevet her.

Metode 1. Meld

Meld- et grafisk værktøj til at opnå forskelle og flette to filer, to mapper. Meld er et visuelt fil- og katalogsammenlignings- og sammenlægningsværktøj til Linux. Meld henvender sig primært til udviklere. Det kan dog være nyttigt for enhver bruger, der har brug for et godt værktøj til at sammenligne filer og mapper.

I Meld kan du sammenligne to eller tre filer, eller to eller tre mapper. Du kan se arbejdskopien fra populære versionskontrolsystemer som CVS, Subversion, Bazaar-NG og Mercurial. Meld er tilgængelig for de fleste Linux-distributioner (Ubuntu, Suse, Fedora osv.), og er til stede i deres hovedlagre.

# aptitude installation meld

Metode 2: Sammenligning af indholdet af to filer i WinMerge.

Det gratis WinMerge-program giver dig mulighed for at sammenligne ikke kun indholdet af filer, det sammenligner også indholdet af hele mapper. WinMerge er et Open Source-diff- og fletteværktøj til Windows. WinMerge kan sammenligne både filer og mapper og vise forskellene i en visuel tekstform, der er let at forstå og behandle.

Efter installationen skal du åbne menupunktet "Filer" - "Åbn". Vælg filer for at sammenligne. For at gøre dette skal du klikke på knappen "Gennemse" og vælge en fil. Når du har valgt filerne, skal du klikke på knappen "OK".

Du kan også redigere filer i WinMerge. Efter lukning af sammenligningsvinduet vil programmet tilbyde at gemme ændringerne i filerne.

Metode 3. diff

diff- filsammenligningsværktøj, der viser forskellen mellem to filer.

    For at sammenligne mapper, brug denne kommando: $ diff -qr< current-directory> < backup-directory>

Metode 4. Kompare

Kompare - viser forskelle mellem filer. Kan sammenligne indholdet af filer eller mapper, samt oprette, vise og anvende patch-filer. Kompare er et grafisk diff-værktøj, der giver dig mulighed for at finde forskelle i filer og også flette dem. Skrevet i Qt og designet primært til KDE. Her er dens vigtigste funktioner:

    Understøtter flere diff-formater;

    Understøtter sammenligning af linux-filer og mapper;

    Understøttelse af visning af diff-filer;

    Brugerdefinerbar grænseflade;

    Oprettelse og anvendelse af patches til filer.

Metode 5. Sammenligning af filer i Total Commander

    Understøttede operativsystemer: Windows

Total Commander har et filsammenligningsværktøj efter indhold, hvor du ikke kun kan sammenligne indhold, men også redigere det og kopiere det fra en fil til en anden.

Efter at have startet Total Commander - i et af panelerne skal du vælge (Indsæt tast) den første fil til sammenligning - i det andet panel skal du åbne mappen med den anden fil og placere markøren på den. Kald programmet til sammenligning: "Filer→Sammenlign efter indhold."

For at foretage ændringer i filen skal du blot klikke på knappen "Rediger". Programmet tilbyder kopierings- og rollback-, søge- og kodningsfunktioner. Hvis du har foretaget ændringer i filen, vil du efter at have lukket sammenligningsvinduet blive bedt om at gemme ændringerne.

Metode 6. Sammenlign filer i Notepad++

    Understøttede operativsystemer: Windows, kan køre på Linux

Notepad++ kan ikke sammenligne filer. For at denne funktionalitet skal vises i Notepad++, skal du installere "Sammenlign" plugin.

Start editoren - gå til menupunktet "Plugins" - "Plugin Manager" - "Vis Plugin Manager". I det nye vindue skal du vælge "Sammenlign" plugin og klikke på knappen "Installer".

Efter installation af plugin'et skal du åbne to filer og vælge menuen "Plugins" - "Sammenlign" - "Sammenlign (Alt+D)". Resultatet af filsammenligningen vil blive præsenteret i separate paneler. Et advarselsskilt vil dukke op modsat linjerne, hvori der findes forskelle.

Metode 7: Sammenligning af filer ved hjælp af Windows kommandoprompt

Sammenligning ved hjælp af Windows-kommandolinjen (cmd.exe) tillader dig ikke at redigere filer, men du kan blot sammenligne indholdet af filer ved hjælp af denne metode.

For at åbne Windows-kommandolinjen skal du gå til "Start" - "Alle programmer" - "Tilbehør" - "Kommandoprompt" eller trykke på "Windows + R", skriv cmd og tryk på Enter-tasten.

Indtast kommandoen ved kommandoprompten:

fc / N sti til den første fil sti til den anden fil

), deres sammenligninger, såvel som sammenligninger af GUI-klienter for dem. Der var også diskussioner om IDE-plugins til at arbejde med git og mercurial. Men praktisk talt der var ingen information om visuel sammenligning og flette konfliktløsningsværktøjer.

Jeg "sprang" for nylig fra mercurial (som jeg stadig finder mere praktisk og logisk) til git, fordi langt de fleste projekter, der er interessante for mig, bruger git og er hostet på github. I den forbindelse opstod spørgsmålet om revision af arsenalet af værktøjer, især spørgsmålet valg af værktøj visuel sammenligning og fletning (diff og fletning). For at udfylde manglen på information om navet besluttede jeg at skrive denne minianmeldelse. Som de siger - på jagt.

Under snittet finder du også eksempler på Git-indstillinger til brug med DiffMerge og WinMerge under Windows. Jeg tror, ​​det vil spare en masse tid.

Navn Ejendommeligheder Platform

KDiff3

Git og WinMerge

1) Tilføj til biblioteket c:/Git/libexec/git-core/mergetools/
winmerge fil med følgende indhold:

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 flette ændringer, opstår der en flettekonflikt, og flettemarkører føjes til den modstridende fil (<<<<<<<, =======, и >>>>>>>). De er nødvendige for at løse konflikten ved hjælp af tredjepartsværktøjer.
Lad os se på filen readme.txt som er dannet som følge af sammenlægning af grene mester og ny i ovenstående eksempel:

<<<<<<< HEAD master str ======= new str >>>>>>> ny
Vi kan åbne konfliktfilen ved hjælp af WinMerge-programmet for at løse konflikten.

Dette åbner to-vejs fletteværktøjet:

Baseret på den beskrevne logik vil vi omskrive flettekommandoen merge_cmd på følgende måde:
merge_cmd() ( "c:/Program Files (x86)/WinMerge/WinMergeU.exe" \ "$MERGED" >/dev/null 2>&1 status=$? )
Faktisk er begge de ovennævnte muligheder ækvivalente.

2) Lad os redigere .gitconfig
tool = winmerge cmd = "winmerge" tool = winmerge cmd = "winmerge" trustExitCode = false keepBackup = false
den sidste linje annullerer lagring af sikkerhedskopifiler i depotmappen.

3) Lad os skabe en konflikt, når to grene flettes (se eksempel ved brug af DiffMerge).
git difftool master new // sammenligne to brancher

Brug kommandoen for at løse konflikten ved sammenlægning af grene
git mergetool

For at sammenligne to eller flere filer i Linux er der kommandoen diff. Det kan sammenligne både individuelle filer og mapper. Lad os se på syntaksen, mulighederne for diff-kommandoen og nogle brugseksempler.

diff kommando syntaks

Diff-kommandoen har følgende syntaks:

Diff [indstillinger] filer-eller-mapper

Vi angiver muligheder og giver to eller flere filer eller mapper, som vi skal sammenligne som input.

diff kommando muligheder

Lad os se på de vigtigste muligheder for diff-kommandoen. Jeg vil kun overveje de muligheder, jeg bruger oftest.

-EIgnorer ændringer forårsaget af tilføjelse af et tabulatortegn til teksten.
-bIgnorer ændringer forårsaget af tilføjelse af mellemrum.
-wIgnorer ændringer, der involverer tilføjelse af mellemrum og tabulatorer.
-Bignorere nye tomme linjer.
-p (eller --show-c-funktion)vis navnet på C-sprogfunktionen, som ændringerne blev fundet i.
-y (eller --side-by-side)vise resultaterne i to kolonner.
-rgennemse mapper rekursivt.
-X FILekskluder fra søgefilerne, hvis navne matcher mønstrene i FILE-filen.
-d (eller --minimal)prøv at finde så få ændringer som muligt (det vil sige udelukke falske positive).

Eksempler på brug af diff-kommandoen

Sammenligning af to tekstfiler

For blot at sammenligne to tekstfiler med navnet myfile1 og myfile2, kør kommandoen i terminalen:

Forskel minfil1 minfil2

Det er praktisk at omdirigere outputtet fra diff-kommandoen til en fil med diff-udvidelsen. De fleste Linux-teksteditorer, såsom Gedit, genkender denne fil og fremhæver dens syntaks. For at dirigere resultatet af sammenligningen til filen changes.diff skal du bruge symbolet for stream-omdirigering (>):

Forskel minfil1 minfil2 > ændringer.forskel

Sammenligning af mapper, der indeholder tekstfiler

Lad os se på et eksempel på sammenligning af to mapper (mydir1 og mydir2), der indeholder tekstfiler. Den største forskel her fra eksemplet ovenfor er, at vi tilføjer -r-indstillingen, hvilket betyder, at den rekursivt vil krydse filer i mapper.

Diff -r mydir1 mydir2 > ændringer.diff

Lad os nu antage, at de mapper, som vi sammenligner filer i, indeholder en masse "skrald", som vi ikke bør sammenligne. Lad os oprette en fil excludeFiles og skrive mønstre og navne på filer ind i den, som vi ikke bør sammenligne. For eksempel kan indholdet af excludeFiles se ud som:

*.o ChangeLog* *.bak *.exe

Lad os nu fortælle diff-kommandoen at bruge vores excludeFiles-fil, når vi sammenligner mapper:

Diff -r -X excludeFiles mydir1 mydir2 > ændringer.diff

Således sammenligner vi filer, hvis navne ikke matcher mønstrene i excludeFiles-filen, for eksempel vasya.exe eller ChangeLog12.

Lad os tilføje et par flere muligheder, der er beskrevet ovenfor, for at forbedre sammenligningsresultatet:

Diff -rwBd -X excludeFiles mydir1 mydir2 > ændringer.diff

Vi sammenligner filer i mapperne mydir1 og mydir2, ignorerer ændringer som følge af tilføjelse af tomme linjer, mellemrum, tabulatorer og bruger også filnavnemønstre i excludeFiles for at udelukke unødvendige filer fra sammenligningen.

Konklusion

For mere information om brug af diff-kommandoen på dit Linux-system, kan du køre kommandoen:

Man diff

Der er også programmer, der giver dig mulighed for at sammenligne filer ved hjælp af en grafisk grænseflade. For eksempel programmet Meld, som visuelt viser, hvor og hvad der er ændret i filerne.