Sammenligning av mapper og filer i Linux. Sammenligning av filer i Linux (diff-kommando)

), deres sammenligninger, samt sammenligninger av GUI-klienter 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 har nylig "hoppet" fra mercurial (som jeg fortsatt synes er mer praktisk og logisk) til git, fordi de aller fleste prosjekter som er interessante for meg 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 å fylle mangelen på informasjon om navet, bestemte jeg meg for å skrive denne minianmeldelsen. Som de sier - på jakt etter.

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

Navn Egendommer Plattform

KDiff3

Git og WinMerge

1) Legg til i katalogen c:/Git/libexec/git-core/mergetools/
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 klarer å slå sammen endringer automatisk, oppstår en flettekonflikt og flettemarkører legges til i konfliktfilen (<<<<<<<, =======, и >>>>>>>). De er nødvendige for å løse konflikten ved hjelp av tredjepartsverktøy.
La oss se på filen readme.txt som dannes som følge av sammenslåing av grener mester og ny i eksemplet ovenfor:

<<<<<<< HEAD master str ======= new str >>>>>>> ny
Vi kan åpne konfliktfilen ved å bruke WinMerge-programmet 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 to grener

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

Webansvarlige eller nettstedeiere må ofte sammenligne to filer basert på innhold. Fra denne artikkelen vil du lære hvordan du sammenligner to filer med hverandre. Alle metoder kjent for meg for å sammenligne tekstfiler og skript (html, css, php, og så videre) er beskrevet her.

Metode 1. Meld

Meld- et grafisk verktøy for å oppnå 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 arbeidskopien 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 til stede i deres hovedlagre.

# aptitude install meld

Metode 2: Sammenligning av innholdet i to filer i WinMerge.

Det gratis WinMerge-programmet lar deg sammenligne ikke bare innholdet i filer, det sammenligner også innholdet i hele mapper. WinMerge er et åpen kildekode-diff- og sammenslåingsverktøy for Windows. WinMerge kan sammenligne både filer og mapper, og viser forskjellene i en visuell tekstform som er enkel å forstå og behandle.

Etter installasjonen åpner du menypunktet "Fil" - "Åpne". Velg filer for å sammenligne. For å gjøre dette, klikk på "Bla gjennom"-knappen og velg en fil. 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- 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. Kan sammenligne innholdet i filer eller kataloger, samt opprette, vise og bruke oppdateringsfiler. Kompare er et grafisk diff-verktøy som lar deg finne forskjeller i filer og også slå dem sammen. Skrevet i Qt og designet primært for KDE. Her er hovedfunksjonene:

    Støtter flere diff-formater;

    Støtte sammenligning av linux-filer og kataloger;

    Støtte for visning av diff-filer;

    Tilpassbart grensesnitt;

    Opprette og bruke patcher på filer.

Metode 5. Sammenligne filer i Total Commander

    Støttede operativsystemer: Windows

Total Commander har et filsammenligningsverktøy etter innhold, der du ikke bare kan sammenligne innhold, men også redigere det 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, åpne mappen med den andre filen og plasser markøren på den. Ring programmet for sammenligning: "Filer → Sammenlign etter innhold."

For å gjøre endringer i filen, klikk bare på "Rediger"-knappen. Programmet tilbyr kopierings- og tilbakestillings-, søke- og kodingsfunksjoner. Hvis du har gjort endringer i filen, etter å ha lukket sammenligningsvinduet, vil du bli bedt om å lagre endringene.

Metode 6. Sammenlign filer i Notepad++

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

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

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

Etter å ha installert programtillegget, åpne to filer og velg menyen "Plugins" - "Sammenlign" - "Sammenlign (Alt+D)". Resultatet av filsammenligningen vil bli presentert i separate paneler. Et varselskilt vil vises på motsatt side av linjene der forskjellene er funnet.

Metode 7: Sammenligning av filer ved hjelp av Windows-ledeteksten

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 å åpne Windows-kommandolinjen, gå til "Start" - "Alle programmer" - "Tilbehør" - "Ledetekst" eller trykk på "Windows + R"-tasten, skriv inn cmd og trykk på Enter-tasten.

Ved ledeteksten skriver du inn kommandoen:

fc / N bane til den første filbanen til den andre filen

), deres sammenligninger, samt sammenligninger av GUI-klienter 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 har nylig "hoppet" fra mercurial (som jeg fortsatt synes er mer praktisk og logisk) til git, fordi de aller fleste prosjekter som er interessante for meg 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 å fylle mangelen på informasjon om navet, bestemte jeg meg for å skrive denne minianmeldelsen. Som de sier - på jakt etter.

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

Navn Egendommer Plattform

KDiff3

Git og WinMerge

1) Legg til i katalogen c:/Git/libexec/git-core/mergetools/
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 klarer å slå sammen endringer automatisk, oppstår en flettekonflikt og flettemarkører legges til i konfliktfilen (<<<<<<<, =======, и >>>>>>>). De er nødvendige for å løse konflikten ved hjelp av tredjepartsverktøy.
La oss se på filen readme.txt som dannes som følge av sammenslåing av grener mester og ny i eksemplet ovenfor:

<<<<<<< HEAD master str ======= new str >>>>>>> ny
Vi kan åpne konfliktfilen ved å bruke WinMerge-programmet 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 to grener

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

Uansett hvilket system jeg har for å fikle med koden, blir det før eller siden for dyrt å sammenligne ulike versjoner av kildekoden. Her er enkle, gratis verktøy for å finne forskjeller i filer for Linux, Windows og Mac. Generelt lanseringsformat – fil1 fil2.

Under Windows takler oppgaven med å sammenligne innholdet i filer (og til og med kataloger, som noen ganger ikke er ubrukelig) godt med WinMerge. Lett. Ikke knyttet til noen IDE. Den er skrevet i Qt og er på tvers av plattformer – den skal også kjøre på niks. I tillegg til filer, kan den også sammenligne innholdet i kataloger (inkludert basert på regexp-masker). Du kan legge til flere plugins.

WinMerge er et tverrplattformverktøy for å sammenligne filer og mer

Mac - opendiff. Det er en egen XCode-komponent. Frittstående kan startes fra kommandolinjen. Den fremhever forskjellene i blekgrå, men den kan forresten vise med piler hva som er lagt til hvor. Kan utføre en sammenslåing (key -merge). Hvis du i tillegg til filene som sammenlignes spesifiserer en felles stamfil etter -ancestor-nøkkelen, vil sammenligningen bli gjort med den. Kan sammenligne mapper.

opendiff-verktøy - gratis filsammenligningsverktøy på Mac

Linux – . Tilgjengelig på alle plattformer (Windows, Mac, Linux) på grunn av at den også er skrevet i Qt. Kan sammenligne opptil tre filer eller kataloger. Støtter muligheten til å slå sammen endringer, med redigeringsstøtte for manuell konfliktløsning.

kdiff3-verktøy - sammenligner to filer

OPPDATERING 18.10.2013

Hvis du jobber i Gnom på niks, er meld et godt valg. Integrasjon med populære versjonskontrollsystemer (Git, Subversion, etc.), sammenslåingsverktøy - automatisk sammenslåing, redigering med å fange opp aktuelle forskjeller i farten, syntaksutheving. Det er porter for OS X Windows.

Vel, som en siste utvei (hvis du ikke kan installere noe tredjepart), kommer en stygg forskjell fra kommandolinjen til unnsetning (forhåndsinstallert på nix-lignende systemer, inkludert Mac og Solaris). Fleksibel. Du kan leke med innstillingene i lang tid og entusiastisk for å kunne vise forskjeller basert på en maske (-F), få ​​en sammenligning i de vanlige to kolonnene (tast –side-by-side), etc. For store, ukjente filer foretrekker jeg utdata i et "kontekstuelt" format, når ikke bare de endrede linjene vises, men også de ved siden av dem.

For å sammenligne mer enn to filer kan diff3 være egnet.

Vanligvis vil diff generere utdata i følgende format:

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

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

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

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

5. Skjuler identiske rader

Hvis du ser nøye på utdataene fra forrige eksempel (fra avsnitt 4 ovenfor), vil du finne at når du bruker kommandolinjealternativet -y, sender diff-verktøyet ikke bare de endrede linjene, men også de identiske linjene i filene den behandler. I tilfelle du trenger å fjerne identiske linjer fra utgangen, kan du bruke --suppress-common-lines alternativet.

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

6. Skrive ut navn på C-språkfunksjoner som inneholder modifisert kode

Når du bruker diff-verktøyet til å sammenligne to C-kildekodefiler, kan du bruke et spesielt alternativ (-p) som forteller verktøyet å skrive ut navnene på funksjoner der endringer ble oppdaget. Anta for eksempel at du vil sammenligne følgende to C-kildekodefiler:

Fil med navnet file1.c:

#inkludere void compare(float x, float y) ( if(x == y) // feil måte for sammenligning ( printf("\n ER LIK med \n"); ) ) int main(void) ( compare(1.234, 1.56789 ); returner 0; )

Fil med navnet fil 2:

#inkludere void compare(float x, float y) ( if(x == y) ( printf("\n ER LIK med \n"); ) ) int main(void) ( compare(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.823013274 +0530 **** *********** *** 2.8 **** void compare(float x, float y) ( ! if(x == y) // feil måte for sammenligning ( printf("\n ER LIK med \n"); ) --- 2,8 ---- void compare(float x, float y) ( ! if(x == y) ( printf("\n ER LIK med \n"); )

Selvfølgelig, hvis kommandolinjealternativet -p brukes, genererer diff mer detaljert utdata, og markerer modifiserte linjer med et utropstegn ("!").

7. Rekursiv sammenligning av innholdet i underkataloger

Diff-verktøyet lar deg også sammenligne innholdet i underkataloger rekursivt, 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/fil2 andre-diff-filer/fil2 2c2< Hello --- >hei

Diff-verktøyet vil kun sammenligne filer fra kataloger på toppnivå, men hvis du bruker parameteren -r (aktiverer den rekursive filsammenligningsmodusen), vil den sammenligne selv de filene som ligger i underkataloger:

$ 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/flere-diff-filer/fil1 andre-diff-filer/flere-diff-filer/fil1 1c1< Hi --- >i diff -r diff-filer/flere-diff-filer/fil2 andre-diff-filer/flere-diff-filer/fil2 2c2< Hello --- >hei

8. Behandle manglende filer som tomme

Diff-verktøyet støtter også et alternativ der du kan fortelle det om å behandle manglende filer som tomme. Hvis du sammenligner filer som heter fil1 og fil3 (og den sistnevnte filen eksisterer ikke), vil diff som standard gi en feilmelding:

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

Det er ikke noe galt; faktisk er denne oppførselen fullstendig berettiget. Men det er tider når du vil unngå feilmeldinger (kanskje når du bruker diff innenfor shell-skript) der 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 har lest begge artiklene i serien nøye og uavhengig gjentatt alle kommandoeksemplene som er diskutert i dem, er det fullt mulig å si at du har mestret alle de grunnleggende ferdighetene for å jobbe med det aktuelle verktøyet. Selvfølgelig kunne vi ikke diskutere alle spørsmål knyttet til diff i flere artikler, men likevel ble alle hovedfunksjonene og funksjonene til dette verktøyet nevnt i dem på en eller annen måte.

Hvis du vil vite litt mer om dette verktøyet, kan du alltid se dens manualside. Jeg tror det ikke er verdt å nevne igjen at du med jevne mellomrom bør bruke verktøyet med forskjellige sett med parametere for å simulere forskjellige arbeidssituasjoner.