Sammenligning af mapper og filer i Linux. Sammenligning af filer i Linux (diff Command)

), 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 man 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 backupfiler i lagerbiblioteket.

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

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 værktøj til sammenligning og sammenlægning af filer og mapper 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, vælg (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"-pluginnet.

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 pluginnet 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, gå til "Start" - "Alle programmer" - "Tilbehør" - "Kommandoprompt" eller tryk 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 man 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 backupfiler i lagerbiblioteket.

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

Uanset hvilket system jeg skal pille ved koden, bliver det før eller siden for dyrt at sammenligne forskellige versioner af kildekoden. Her er nemme, gratis værktøjer til at finde forskelle i filer til Linux, Windows og Mac. Generelt lanceringsformat – fil1 fil2.

Under Windows klarer opgaven med at sammenligne indholdet af filer (og endda mapper, som nogle gange ikke er ubrugelige) godt med WinMerge. Let. Ikke bundet til nogen IDE. Den er skrevet i Qt og er på tværs af platforme – den skal også køre på niks. Ud over filer kan den også sammenligne indholdet af mapper (inklusive baseret på regexp-masker). Du kan tilføje yderligere plugins.

WinMerge er et værktøj på tværs af platforme til sammenligning af filer og mere

Mac - opendiff. Det er en separat XCode-komponent. Standalone kan startes fra kommandolinjen. Den fremhæver forskellene i lysegrå, men i øvrigt kan den med pile vise, hvad der er tilføjet hvor. Kan udføre en fletning (key -merge). Hvis du udover de filer, der sammenlignes, angiver en fælles stamfil efter -ancestor-nøglen, så vil sammenligningen blive foretaget med den. Kan sammenligne mapper.

opendiff-værktøj - gratis filsammenligningsværktøj på Mac

Linux – . Tilgængelig på alle platforme (Windows, Mac, Linux) på grund af, at den også er skrevet i Qt. Kan sammenligne op til tre filer eller mapper. Understøtter muligheden for at flette ændringer med redigeringsstøtte til manuel konfliktløsning.

kdiff3-værktøj - sammenligner to filer

OPDATERING 18/10/2013

Hvis du arbejder i Gnom på niks, så er meld et godt valg. Integration med populære versionskontrolsystemer (Git, Subversion osv.), fletteværktøjer - automatisk fletning, redigering med at fange aktuelle forskelle på farten, syntaksfremhævning. Der er porte til OS X Windows.

Nå, som en sidste udvej (hvis du ikke kan installere noget tredjepart), kommer en uskøn forskel fra kommandolinjen til undsætning (forudinstalleret på nix-lignende systemer, inklusive Macs og Solaris). Fleksibel. Du kan lege med indstillingerne i lang tid og entusiastisk for at kunne vise forskelle baseret på en maske (-F), få ​​en sammenligning i de sædvanlige to kolonner (tast –side-by-side) osv. For store, ukendte filer foretrækker jeg output i et "kontekstuelt" format, når ikke kun de ændrede linjer vises, men også dem, der støder op til dem.

Til sammenligning af mere end to filer kan diff3 være velegnet.

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 outputformat, 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 ); returner 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.