Hvordan bruke diff3 på Linux for å sammenligne tre filer og løse konflikter

Diff3-kommandoen i Linux sammenligner tre tekstfiler, avdekker endringer og muliggjør sammenslåing, og er ideell for kildekode og tekstbaserte dokumenter.

Linux diff3-kommandoen avdekker forskjeller mellom tre tekstfiler. Den er nyttig for å identifisere versjoner, avdekke endringer og slå sammen tekst. Diff3 er ideell for kildekode, skripter eller ren tekst.

Hva er en diff?

Se forskjellen, men for filer

En diff er resultatet av å kjøre et differensieringsverktøy på filer. Utdataene viser forskjeller med linjenummer og filreferanser. Diff3 genererer diffs fra tre filer.

Verktøy som Git utfører diffs effektivt som en del av programvareversjonskontroll (SVC). Hvis du bruker Git eller et annet SVC, fortsett med det.

Diffs er ikke bare for utviklere. Har du tekstbaserte materiell med ulike utkast, vil diffs være til god hjelp.

Diff3 håndterer det utfordrende med å sammenligne tre filer sømløst.

Hvordan diff3 er forskjellig

Trippel diff

Diff3 krever tre filnavn. Tradisjonelt kalles de mine, eldre og dine, men navngivingen er fleksibel. Dette forutsetter en eldre fil og to modifiserte versjoner.

Eksempel:

Innholdet i my-file.txt:

første linje andre linje redigert tredje linje

Innholdet i old-file.txt:

første linje andre linje tredje linje

Innholdet i your-file.txt:

første linje andre linje endret tredje linje

Kjør en treveis diff med denne kommandoen:

diff3 my-file.txt old-file.txt your-file.txt

Diff3 viser at den tredje linjen er forskjellig i hver fil.

Diff3-utdataformat

Hva er et hunk?

Forskjeller presenteres i hunks. Hver hunk begynner med '====' etterfulgt av et nummer som angir filreferansen. Ingen nummer innebærer at alle tre filene er ulike.

For eksempel, inneholder older.txt og yours.txt disse linjene:

Linje 1 Linje 2 Linje 3

Mens mine.txt har en modifisert første linje:

Min fil Linje 1 Linje 2 Linje 3

Kommandoen ser slik ut:

diff3 mine.txt older.txt yours.txt

'====1' peker mot fil 1, altså mine.txt.

'1:' representerer linje 1, '1c' indikerer at linje 1 må endres for å samsvare med den eldre filen. Deretter vises de tilsvarende linjene fra filene to og tre, listet én gang men identifisert to ganger. '2:1c' og '3:1c' betyr at linjen er felles for begge filer, med linjen med forskjellen plassert under.

La oss synkronisere mine.txt og yours.txt med denne teksten:

Linje 1 Linje 2 Linje 3

Eldre.txt har en modifisert andre linje:

Linje 1 Eldre fil Linje 2 Linje 3

Uten å endre filnavnene, kan vi kjøre kommandoen igjen:

diff3 mine.txt older.txt yours.txt

'2' på slutten av '====2' viser at forskjellen ligger i fil to. Tilsvarende linjer fra fil én og tre vises, etterfulgt av linjen med forskjellene fra fil to.

La oss oppdatere fil to igjen, med en ny linje:

Linje 1 Eldre fil Linje 2 Linje 3 Linje 4

 

diff3 mine.txt older.txt

Vi har to hunks her, med forskjeller i fil to.

Første hunk indikerer at linje to i filer én og tre må endres for å matche linje to i fil to. Alternativt kan linje to i fil to justeres for å stå i samsvar med de to andre filene.

Andre hunk viser til et nytt element: filen older.txt har en fjerde linje. '1:3a' og '3:3a' informerer om at en ny linje skal legges til etter linje tre i filer én og tre, for å matche innholdet i fil to. Denne linjen følger rett under.

diff3 kan også avsløre sekvenser av linjer med ulikheter.

La oss tilpasse mine.txt og older.txt med følgende tekst:

Linje 1 Linje 2 Linje 3

To linjer i yours.txt må endres:

Linje 1 Din Linje 2 Din Linje 3

Kommandoen for å sammenligne filene er:

diff3 mine.txt older.txt yours.txt

Her bruker linjeindikatorer to tall separert med komma ',' for å vise en linjerekke. For eksempel, '1:2,3c' indikerer forskjeller mellom linjene to og tre i fil 1.

Sammenslåing med diff3

Bring det hele sammen

I stedet for bare å vise forskjellene, kan diff3 slå sammen innholdet fra filene til én fil. Det ruller forskjellene mellom fil tre og fil to inn i fil én.

Hvis alt går knirkefritt, vil filene smelte sammen uten konflikter. Ofte vil endringer på samme linje forårsake konflikter. Disse vil bli uthevet, slik at du kan velge hvilke linjer du ønsker å beholde.

Utskriften går til terminalvinduet, men kan enkelt omdirigeres til en fil for videre redigering.

Her er et enkelt eksempel. Innholdet i mine.txt:

Vi skal kjøre diff3 mot disse filene. Jippi!

Innholdet i older.txt:

Vi skal kjøre diff3 mot disse filene.

Og innholdet i yours.txt:

Vi skal kjøre diff3-kommandoen mot disse filene.

For å utføre diff-en, bruker vi den vanlige kommandoen, og så kjører vi den igjen med -m (sammenslå) for å fullføre prosessen:

diff3 mine.txt older.txt yours.txt diff3 -m mine.txt older.txt yours.txt

Dette kombinerer forskjellene til en ny fjerde versjon. For å lagre utgangen, legg til en omdirigering:

diff3 -m mine.txt older.txt yours.txt > fjerde.txt

Sammenslåinger er sjeldent perfekte. La oss se på et mer komplekst eksempel med endringer i flere filer.

Ny mine.txt:

kattugle svale due spurv nøtteskrike

Ny older.txt:

kattugle svale due due nøtteskrike

Ferdig yours.txt:

kattugle gjøk rav due nøtteskrike hackspett finker

Kjør diff3 for å avdekke endringer:

diff3 mine.txt older.txt yours.txt

Det er endringer i alle tre filer, og ekstra linjer i én av dem. La oss gjøre en sammenslåing og lagre resultatet:

diff3 -m mine.txt older.txt yours.txt > ny-fil.txt

Åpne filen i din favorittredigerer:

gedit ny-fil.txt

Konfliktseksjonen vises mellom '>>>>>>>'. Linjene fra fil én er plassert der.

I en reell fil situasjon vil du mest sannsynlig…

Forskjeller og Konflikter

Endringer i filversjoner kan lett forsvinne i glemsel. Diff3-kommandoen avdekker dem.

Forskjeller. Å fusjonere krevende fragmenter er mer tidkrevende enn å sammenligne, men diff3 sikrer at konflikter ikke passerer ubemerket.

Hvis du vil lese flere artikler som Hvordan bruke diff3 på Linux for å sammenligne tre filer og løse konflikter, kan du besøke kategorien Linux.

Index
  1. Hva er en diff?
    1. Se forskjellen, men for filer
  2. Hvordan diff3 er forskjellig
    1. Trippel diff
  3. Diff3-utdataformat
    1. Hva er et hunk?
  4. Sammenslåing med diff3
    1. Bring det hele sammen
    2. Forskjeller og Konflikter

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

Go up