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 linjeInnholdet i old-file.txt:
første linje andre linje tredje linjeInnholdet i your-file.txt:
første linje andre linje endret tredje linjeKjør en treveis diff med denne kommandoen:
diff3 my-file.txt old-file.txt your-file.txtDiff3 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 3Mens mine.txt har en modifisert første linje:
Min fil Linje 1 Linje 2 Linje 3Kommandoen 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 3Eldre.txt har en modifisert andre linje:
Linje 1 Eldre fil Linje 2 Linje 3Uten å 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.txtVi 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 3To linjer i yours.txt må endres:
Linje 1 Din Linje 2 Din Linje 3Kommandoen for å sammenligne filene er:
diff3 mine.txt older.txt yours.txtHer 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.txtDette kombinerer forskjellene til en ny fjerde versjon. For å lagre utgangen, legg til en omdirigering:
diff3 -m mine.txt older.txt yours.txt > fjerde.txtSammenslå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øtteskrikeNy older.txt:
kattugle svale due due nøtteskrikeFerdig yours.txt:
kattugle gjøk rav due nøtteskrike hackspett finkerKjør diff3 for å avdekke endringer:
diff3 mine.txt older.txt yours.txtDet 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.txtKonfliktseksjonen 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.

Legg igjen en kommentar