# &kdiff3;-håndbogen

Joachim
Eibl

     joachim.eibl at gmx.de

&erik.kjaer.pedersen.role;

2002-2004
Joachim Eibl
&FDLNotice;
2004-05-29
0.9.84

&kdiff3; er et værktøj til sammenligning og sammenfletning af filer og mapper, som:

- sammenligner og fletter to eller tre tekst-inddatafiler eller mapper sammen,

- viser forskellen linje-for-linje og tegn-for-tegn(!),

- sørger for en automatisk sammenfletningsfunktion,

- har en editor til behagelig løsning af sammenfletningskonflikter,

- tilbyder netværksgennemsigtighed via KIO,

- har valgmuligheder til at fremhæve eller skjule ændringer i blanke tegn eller kommentarer.

Dette dokument beskriver KDiff3 version 0.9.84.

KDE
kdeextragear
kdiff3
diff
sammenflet
CVS
trippelsammenligning
sammenlign
filer
mapper
versionskontrol
trevejs sammenfletning
forskelle i linje
synkronisér
kpart
kio
netværksgennemsigtighed
editor
blanke tegn
kommentarer

## Indledning

### Endnu en sammenligningsgrænseflade?

Der findes flere grafiske sammenligningsværktøjer. Hvorfor skal du vælge KDiff3? Lad mig fortælle dig hvorfor jeg skrev det.

KDiff3 blev påbegyndt fordi jeg var tvunget til at lave en svær sammenfletning. At sammensætte er nødvendigt når flere personer arbejder med samme fil i et projekt. En sammenfletning kan være delvis automatiseret, når sammenfletningsværktøjet ikke kun har adgang til de nye ændrede filer (som kaldes "grene"), men også originalfilen (som kaldes "basis"). Sammenfletningsværktøjet vælger automatisk en ændring som kun er udført i en gren. Når flere bidragydere ændrer samme linjer, detekterer sammenfletningsværktøjet en konflikt som skal løses manuelt.

Sammenfletningen var svær eftersom en bidragyder havde ændret meget og rettet indrykningen mange steder. Den anden bidragydere havde også ændret meget tekst i samme fil, hvilket forårsagede flere konflikter ved sammenfletningen.

Værktøjet som jeg dengang brugte viste kun ændrede linjer, men ikke hvad der var ændret indenfor linjen. Der fandtes heller ikke nogen information om hvor kun indrykningen var ændret. Sammenfletningen var et mindre mareridt.

Det var altså begyndelsen. Den første version kunne vise forskelle på en linje, og viste forskelle i blanke tegn. Senere kom mange andre funktioner til for at øge brugbarheden.

Hvis du for eksempel hurtigt vil sammenligne en tekst, kan du kopiere den til klippebordet og indsætte den i et af sammenligningsvinduerne.

En funktion som krævede en stor anstrengelse var funktionen for mappesammenligning og sammenfletning, som gjorde programmet til en næsten fuldstændig filsøger.

Jeg håber at KDiff3 også virker for dig. Hav det sjovt!

Joachim Eibl (2003)

### Skærmaftryk og funktioner

Dette skærmaftryk viser forskellen mellem to tekstfiler

(Med en tidlig version af KDiff3):

Trevejssammenfletning understøttes fuldstændigt. Det er nyttigt hvis to personer ændrer kode uafhængig af hinanden. Originalfilen (basen) bruges til at hjælpe KDiff3 med automatisk at vælge de rigtige ændringer. Editoren for sammenfletning under sammenligningsvinduerne lader dig løse konflikter, mens den viser dig hvilken udskrift du får. Du kan til og med redigere udskriften. Dette skærmaftryk viser tre inddatafiler som sammensættes:

KDiff3 hjælper dig også med at sammenligne og sammenflette hele mapper. Dette skærmaftryk viser KDiff3 under en mappesammenfletning:

### Flere funktioner

#### Linje-for-linje og tegn-for-tegn sammenligningsvisning

Ved at bruge mulighederne en grafisk farveskærm har, viser KDiff3 nøjagtigt hvad forskellene er. Når du skal lave mange kodegennemgange, vil du kunne lide dette.

#### Se forskelle i blanke tegn med et blik

Mellemrum og tabulatorer som er forskellige ses. Når linjer kun er forskellige i mængden af blanke tegn ses det med et blik i sammendragssøjlen til venstre. (Ikke flere problemer hvis nogen ændrer indrykningen.)

#### Trevejssammenligninger

Analysér tre filer og se hvor de adskiller sig.

Venstre/midt/højre vindue kaldes A/B/C og har blå/grøn/magenta farve.

Hvis en fil er den samme og en anden anderledes for en linje, så viser farverne hvilken fil der er anderledes. Den røde farve betyder at begge de andre filer er forskellige.

#### Bekvem sammenfletning af to eller tre inddatafiler

KDiff3 kan bruges til at sammenflette to eller tre inddatafiler og sammenfletter automatisk så meget som muligt. Resultatet vises i et redigerbart vindue hvor de fleste konflikter kan løses med et enkelt museklik. Vælg knapperne A/B/C i værktøjslinjen for at vælge kilden som skal bruges. Du kan også vælge mere end en kilde. Eftersom udskriftsvinduet er en editor, kan til og med konflikter som behøver yderligere korrigering løses her uden at kræve et andet værktøj.

#### Og ...

- Hurtig navigering via knapper.

- Et museklik i sammendragssøjlen synkroniserer alle vinduer så samme position vises.

- Markér og kopiér fra hvilket som helst vindue, og indsæt i resultatvinduet for sammenfletning.

- Oversigtssøjle som viser hvor ændringer og konflikter er.

- Farverne kan justeres efter dine specifikke ønsker.

- Justerbar fanebladsstørrelse.

- Valgmulighed for at indsætte mellemrum i stedet for tabulatortegn.

- Åbn filer bekvemt via dialoger, eller angiv filnavn på kommandolinjen.

- Søg efter strenge i alle tekstvinduer. Søg (Ctrl+F) og Søg igen (F3).

- Vis linjenummer for hver linje.

- Indsæt klippebordet eller træk tekst til et inddatavindue for sammenligning

- Netværksgennemsigtighed via KIO.

- Kan bruges som en forskelsviser i KDevelop 3.

- Tekstombrydning af lange linjer.

- ...

## Dokumentation af filsammenligning og fletning

### Kommandolinjeflag

#### Sammenlign to filer:

    kdiff3 fil1 fil2

#### Sammenflet to filer:

    kdiff3 fil1 fil2 -m
       kdiff3 fil1 fil2 -o uddatafil

#### Sammenlign tre filer:

    kdiff3 fil1 fil2 fil3

#### sammenflet tre filer:

    kdiff3 fil1 fil2 fil3 -m
       kdiff3 fil1 fil2 fil3 -o uddatafil

Bemærk at fil1 behandles som basis for fil2 og fil3.

#### Specialtilfælde: Filer med samme navn

Hvis alle filer har samme navn men er i forskellige mapper, kan du reducere hvor meget du skal skrive ved kun at angive filnavnet for den første fil. F.eks.:

    kdiff3 kat1/filnavn kat2 kat3

#### Kommandolinje for at starte en mappesammenligning eller sammenfletning:

Dette er meget lignende, men nu drejer det sig om mapper.

    kdiff3 kat1 kat2
       kdiff3 kat1 kat2 -o målkat
       kdiff3 kat1 kat2 kat3
       kdiff3 kat1 kat2 kat3 -o målmappe

For mappesammenligning og sammenfletning kan du fortsætte med at læse her.

#### For mere information om kommandolinjeflag bruges:

    kdiff3 --help
    Flag:
      -m, --merge               Indflet inddata.
      -b, --base file           Eksplicit basisfile. For kompatibilitet med visse værktøjer.
      -o, --output file         Uddatafil. Implicerer -m. F.eks.: -o nyfil.txt
      --out file                Uddatafil igen. (Synlig navneerstatning for inddatafil 1.)
      --auto                    Ingen GUI hvis alle konflikter løser sig selv. (Behøver -o file)
      --qall                    Løs ikke konflikter automatisk. (For kompatibilitet...)
      --L1 alias1               Synlig navneerstatning for inddatafil 1 (basis).
      --L2 alias2               Synlig navneerstatning for inddatafil 2.
      --L3 alias3               Synlig navneerstatning for inddatafil 3.
      -L, --fname alias      Alternativ synlig navneerstatning. Giv dette en gang for hver inddata.
      -u                        Har ingen virkning. For kompatibilitet med visse værktøjer.

### Dialogen Åbn

Eftersom mange inddatafiler skal kunne vælges, har programmet en særlig åbningsdialog:

Åbningsdialogen tillader at filnavnene redigeres i hånden, at en fil vælges via filsøgeren ("Fil...") eller at nyligt brugte filer vælges i dropned-feltet. Hvis du åbner dialogen igen, findes de nuværende navne stadigvæk der. Den tredje inddatafil kræves ikke. Hvis feltet for "C" forbliver tomt, udføres kun en tovejs sammenligninganalyse.

Du kan også vælge en mappe med "Mappe...". Hvis en mappe angives for A, starter en mappesammenligning og sammenfletning. Hvis A angiver en fil, men B, C eller udskriften angiver en mappe, bruger KDiff3 filnavnet fra A i de angivne mapper.

Hvis "Sammenflet" er valgt, bliver linjen "Udskrift" redigerbar. Det kræves dog ikke at uddatafilens navn angives med det samme. Du kan også vente med dette til du gemmer.

Knappen "Indstil" viser indstillingsdialogen, så du kan indstille tilvalgene inden analysen udføres.

### Indsæt eller slip inddata

Sommetider vil du sammenligne dele af en tekst som ikke er en egen fil. KDiff3 lader dig også indsætte tekst fra klippebordet i det inddatavindue for sammenligning som har fokus. Sammenligningsanalysen sker så med det samme. I åbningsdialogen behøver du så ikke at angive filer, men kun at lukke den via "Annullér".

Du kan også bruge træk og slip: Træk en fil fra en filhåndtering eller markeret tekst fra en editor og slip den på et inddatavindue til sammenligning.

Hvad er idéen? Sommetider indeholder en fil to lignende funktioner, men at kontrollere hvor ens de virkelig er bliver en stor anstrengelse hvis du først skal oprette to filer og derefter indlæse dem. Nu kan du helt enkelt kopiere, indsætte og sammenligne de relevante afsnit.

Bemærk: For øjeblikket kan du ikke trække noget fra KDiff3. Det understøttes kun at slippe inddata i sammenligningvinduet.

Advarsel: Visse editorer tolker stadigvæk træk og slip til et andet program som klip ud (i stedet for kopiér) og indsæt. De oprindelige data kan derfor gå tabt.

### Tolk informationen i inddatavinduet

Længst oppe i hvert tekstvindue findes dets "informationslinje". Informationslinjerne i inddatavinduet indeholder bogstaverne "A", "B" eller "C", filnavnet og linjenummeret for den første synlige linje i vinduet. (Bemærk at vinduet "C" er valgfrit.) Hver informationslinje vises i sin egen farve. (Hvis søgestierne er for lange til at få plads, kan du flytte musen til informationslinjen, så vil et værktøjsvink vise hele navnet.)

De tre inddatavinduer tildeles bogstaverne "A", "B" og "C". "A" har blå farve, "B" har grøn farve og "C" magenta. (Det er standardfarverne, men de kan ændres via indstillingsmenuen.)

Når en forskel opdages viser farven hvilken inddatafil som adskiller sig. Når begge de øvrige inddatafiler adskiller sig, er farven som bruges for at udtrykke dette normalt rød ("Konfliktfarve" i indstillingerne). Dette farvelægningsmønster er særlig nyttigt i tilfældet med tre inddatafiler, som ses i næste afsnit (Sammenfletning).

Til venstre for hver tekst er "sammendragssøjlen". Hvis forskelle opstod på en linje, viser sammendragssøjlen tilsvarende farve. For en forskel som kun består af blanke tegn er sammendraget afkrydset. For programmeringssprog, hvor blanke tegn ikke er så vigtige er det nyttigt at se med et blik om noget af vigtighed er ændret. (For C/C++ er blanke tegn kun interessante inde i strenge, i kommentarer, for præprocessoren og i nogle meget esoteriske situationer.)

Den lodrette linje som adskiller sammendragssøjlen og teksten er afbrudt hvis inddatafilen ikke har nogen linjer der. Når tekstombrydning er aktiveret så vil denne linje se prikket ud for ombrudte linjer.

På højre side er en "oversigtssøjle" synlig til venstre for den lodrette rullebjælke. Den viser et komprimeret sammendrag af inddata "A". Alle forskelle og konflikter er synlige med et blik. Når kun to inddatavinduer bruges, ses alle forskelle i rødt her, eftersom alle forskelle også er konflikter. Et sort rektangel indrammer den synlige del af inddata. For meget lange inddatafiler, hvor antallet af inddatalinjer er større end højden på oversigten i billedpunkter, deler flere inddatalinjer en oversigtslinje. En konflikt har prioritet over enkle forskelle, som har prioritet over ingen ændringer, så ingen forskelle eller konflikter går tabte her. Ved at klikke på oversigtssøjlen vises den tilsvarende tekst.

### Sammenfletning og editorvinduet for sammenfletning af uddata

Editorvinduet for sammenfletning af uddata (under inddatavinduet for sammenligning) har også en informationslinje længst oppe som viser "Udskrift", filnavnet og "[Ændret]" hvis du har redigeret noget. Oftest indeholder det en tekst fra de automatiske sammenfletningsfunktioner, men det indeholder også ofte konflikter.

!!! Gem er deaktiveret indtil alle konflikter er løst!!! (Brug knapperne "Gå til foregående/næste uløste konflikt" for at finde de tilbageværende konflikter.)

Med kun to filer er hver forskel også en konflikt, som skal løses manuelt.

Med tre inddatafiler behandles den første som basis, mens den anden og tredje inddatafil indeholder ændringer. Hvis kun inddata B eller C er ændret for en vis linje, men ikke begge vælges den ændrede kilde automatisk. Kun hvis B og C er ændret på samme linjer, detekterer værktøjet en konflikt som skal løses manuelt. Når B og C er ens, men ikke det samme som A, vælges C.

Editorvinduet for sammenfletning af uddata har også en sammendragssøjle til venstre. Den viser bogstaverne for inddata fra hvilken linjen valgtes, eller ingenting hvis alle tre kilder var ens for linjen. Ved konflikter viser den et spørgsmølstegn "?" og linjen viser "< Konflikter ved sammenfletning >", alt med rødt. Eftersom det ville tage meget lang tid at løse konflikter linje for linje, grupperes linjer i grupper som har samme forskelle og konfliktkarakter. Konflikter med kun blanke tegn adskilles dog fra andre konflikter for at forbedre sammenfletningen af filer hvor indrykningen er ændret på mange linjer.

Når du klikker på sammendragssøjlen med venstre museknap i et af vinduerne, så markeres gruppen som hører til denne linje i alle vinduer og gruppens begyndelse vises. (Dette kan indebære et automatisk spring i positionen i vinduerne hvis gruppens begyndelse ikke ses.) Gruppen bliver så til den "aktuelle gruppe". Den markeres med "Baggrundsfarven for aktuelt sammenligninginterval" og en sort linje vises til venstre for teksten.

Bemærk knapperne for inddatavalg som indeholder bogstaverne "A", "B" og "C" i værktøjslinjen under menulinjen. Når du klikker på en af knapperne for inddatavalg, tilføjes linjerne fra disse inddata til sidst i den markerede gruppe, hvis gruppen ikke allerede indeholdt denne kilde. Ellers fjernes linjerne fra disse inddata.

Desuden kan du redigere en hvilken som helst linje. Sammendragssøjlen viser "m" for hvert linje der er ændret.

Sommetider, når en linje fjernes enten på grund af automatisk fletning eller ved redigering og ingen andre linjer er tilbage i gruppen, vises teksten <Ingen kildelinjer> på linjen. Det er kun en pladsmarkør for gruppen hvis du ændrer mening og vælger en kilde igen. Teksten ses ikke i gemte filer eller i nogen markeringer som du vil kopiere og indsætte.

Teksten "< Konflikter ved indfletning >" vises i klippebordet hvis du kopierer og indsætter noget tekst som indeholder en sådan linje. Men vær stadigvæk forsigtig med at gøre det.

Den normale sammenfletning vil starte med at løse simple konflikter automatisk. Men "Flet"-menu sørger for handlinger for andre almindelige behov. Hvis du skal vælge samme kilde for de fleste konflikter, så kan du vælge "A", "B" eller "C" overalt, eller kun for de tiloversblevne uløste konflikter, eller for uløste konflikter med blanke tegn. Hvis du ønsker at afgøre hver lille forskel selv, kan du "Sætte lille forskel til konflikt". Eller hvis du ønsker at vende tilbage de automatiske valg udført af KDiff3 så vælg "Løs simple konflikter automatisk". KDiff3 starter så sammenfletningen forfra. For handlinger der ændrer dine tidligere ændringer vil KDiff3 bede om bekræftelse før den går videre.

Bemærk: Når en af kilderne for uløste konflikter med blanke tegn vælges og tilvalgene "Ignorér tal" eller "Ignorér C/C++ kommentarer" bruges så bliver ændringer i tal eller kommentarer også behandlet som blanke tegn.

### Navigering og redigering

Meget navigering gøres med rullebjælkerne og musen, men du kan også navigere med tastaturet. Hvis du klikker på et vindue kan du bruge markørtasterne venstre pil, højre pil, opad pil, nedad pil, Page Up, Page Down, Home, End, Ctrl+Home og Ctrl+End som du kan i andre programmer.

Du kan også bruge musehjulet til at rulle opad og nedad.

I editoren for fletning kan du også bruge andre taster til redigering. Du kan skifte mellem indsætnings- og erstatningstilstand med tasten Insert. (Normaltilstanden er at indsætte.)

Et klik med venstre museknap i en sammendragssøjle synkroniserer alle vinduer til at vise begyndelsen af samme gruppe linjer (som forklares i afsnittet Fletning).

Værktøjslinjen indeholder også syv navigeringsknapper som du kan bruge til at gå til nuværende/første/sidste forskel, til næste/foregående forskel (Ctrl+Nedad pil eller Ctrl+Opad pil), til næste/foregående konflikt (Ctrl+Page Down eller Ctrl+Page Up) eller til næste/foregående uløste konflikt. Bemærk at for KDiff3 forbliver en "konflikt" som ikke automatisk løstes ved start af sammenfletningen altid en "konflikt" også selv om den er løst. Deraf nødvendigheden for at adskille "uløst konflikt".

Der er også en knap som hedder "Gå automatisk til næste uløste konflikt efter valg af kilde" (automatisk fortsættelse). Hvis du aktiverer dette, så går KDiff3 automatisk frem til næste uløste konflikt når en kilde vælges. Det kan hjælpe når du kun vil vælge en kilde. Når du behøver begge kilder, eller du vil redigere efter valget, bør du formodentlig lukke for dette. Inden KDiff3 fortsætter til næste uløste konflikt, vises effekten af valget en kort tid. Denne forsinkelse kan justeres i indstillingerne under Sammenlign og sammenflet. Du kan angive "Forsinkelse ved automatisk fortsættelse" i millisekunder mellem 0 og 2000. Vink: Træt af mange klik? Brug en kort forsinkelse og genvejstasterne Ctrl+1, Ctrl+2 eller Ctrl+3 for mange konflikter.

### Markér, kopiér og indsæt

Inddatavinduerne viser ikke nogen markør, så markeringer skal gøres med musen, ved at klikke med venstre museknap på begyndelsen, holde museknappen nede og gå til slutningen, hvor museknappen slippes igen. Du kan også markere et ord ved at dobbeltklikke på det. I editoren for sammenfletningsuddata kan du også markere med tastaturet, ved at holde tasten "Shift" nede og navigere med piltasterne.

For at kopiere til klippebordet skal du trykke på knappen "Kopiér" (Ctrl+C eller Ctrl+Insert). Men der er et valg som hedder "Kopiér markering automatisk". Hvis det er markeret, kopieres hvad du end vælger med det samme, og du behøver aldrig eksplicit at kopiere. Men vær forsigtig når du bruger dette, eftersom klippebordets indhold kan ødelægges ved en fejl.

"Klip" (Ctrl+X eller Shift+Delete) kopierer til klippebordet og fjerner den markerede tekst, og "Indsæt" (Ctrl+V eller Shift+Insert) indsætter teksten fra klippebordet på markørens position eller over nuværende markering.

### Gemmer

At gemme tillades kun når alle konflikter er løste. Hvis filen allerede findes og punktet "Sikkerhedskopiér filer" er markeret, ændres originalversionens navn med tilføjelse af filendelsen ".orig", og hvis en sådan fil allerede findes fjernes den. Når du afslutter eller starter en ny sammenligninganalyse og data ikke er gemt endnu, spørger KDiff3 om du vil gemme, annullere eller fortsætte uden at gemme. (KDiff3 fanger ingen signaler, så hvis du "dræber" KDiff3 går data tabt.)

Linjeslut gemmes følgende den normale metode i det underliggende operativsystem. For Unix slutter hver linje med et nylinjetegn "\n", mens hver linje for Windows-baserede system slutter med et returtegn og et nylinjetegn "\r\n". KDiff3 beholder ikke linjeslut for inddatafilerne, hvilket også betyder at du ikke skal bruge KDiff3 med binær filer.

### Søg efter strenge

Du kan søge efter en streng i et hvilket som helst tekstvindue i KDiff3. Kommandoen "Søg..." (Ctrl+F) i menuen Redigér, viser en dialog som lader dig angive strengen at søge efter. Du kan også vælge de vinduer som skal gennemsøges. Søgning starter altid fra begyndelsen. Brug kommandoen "Søg igen" (F3) for at fortsætte til næste forekomst. Hvis du vælger at søge i flere vinduer, gennemsøges det første vindue fra begyndelsen til slutningen inden søgningen fortsætter fra begyndelsen i næste vindue, osv.

### Tilvalg

Tilvalg og listen med de nylige filer gemmes når du afslutter programmet, og indlæses igen når du starter det. (Menuen Opsætning -> Indstil KDiff3...)

#### Skrifttype

Vælg en skrifttype med fast bredde. (På visse systemer viser dialogen også skrifttyper med variabel bredde, men du bør ikke bruge dem.)

Kursiv stil for forskelle:

  Hvis du markerer dette, vises tekstforskelle med kursiv versionen af den valgte skrifttype. Hvis skrifttypen ikke understøtter kursiv stil, gør dette ingenting.

#### Farver

Forgrundsfarve:

  Oftest sort.

Baggrundsfarve:

  Oftest hvid.

Baggrundsfarve for sammenligning:

  Oftest lysegrå.

Farve A:

  Oftest mørkeblå.

Farve B:

  Oftest mørkegrøn.

Farve C:

  Oftest mørk magenta.

Konfliktfarve:

  Oftest rød.

Baggrundsfarve for nuværende område:

  Oftest lysegul.

Baggrundsfarve for nuværende sammenligningsområde:

  Oftest mørkegul.

For systemer der kun har 16 eller 256 farver er visse rene farver ikke tilgængelige. For sådanne systemer vælger knappen "Standard" rene farver.

#### Opsætning af editor

Tabulator indsætter mellemrum:

  Hvis dette ikke er markeret, og du trykker på tabulatortasten, indsættes en tabulator, ellers indsættes et passende antal mellemrum.

Tabulatorbredde:

  Kan justeres efter dine specielle behov. Normalværdien er 8.

Automatisk indrykning:

  Når du trykker på Enter eller returtasten, bruges de foregående linjers indrykning for den nye linje.

Kopiere markering automatisk:

  Hver markering kopieres med det samme til klippebordet når dette aktiveres, og du behøver ikke kopiere den eksplicit.

Stil for linjeafslutning:

  Når du gemmer kan du vælge den stil for linjeafslutning du foretrækker. Standardindstillingen er det almindelige valg for det operativsystem der bruges.

Brug lokalt tegnsæt:

  For at vise specielle tegn. Prøv at ændre dette hvis nogle tegn i dit sprog ikke vises rigtigt.

#### Opsætning af sammenligning og fletning

Når filer sammenlignes forsøger KDiff3 først at matche linjer som er ens i alle inddata-filer. Det er kun under dette skridt at blanke tegn kan ignoreres. Det andet skridt sammenligner hver linje. Under dette skridt ignoreres blanke tegn ikke. Under sammenfletning ignoreres blanke tegn heller ikke.

Behold returtegn:

  Visse editorer (på visse systemer) gemmer returtegn '\r' og nylinjetegn '\n' i slutningen af linjen, mens andre kun gemmer nylinjetegnet '\n'. Oftest ignorerer KDiff3 returtegnet, men så ser filer som ikke har samme størrelse ens ud ved sammenligning side om side. Når dette tilvalg er markeret, gøres returtegn synlige, men behandles som blanke tegn. Dette skal være slået fra under en sammenfletning. Normalværdien er fra.

Ignorér cifre:

  Normalværdien er fra. Ciffertegn ('0'-'9','.', '-') ignoreres under første del af analysen når linjematchningen udføres. Forskellene for resultatet vises ikke desto mindre, men de behandles som blanke tegn.

Ignorér C/C++ kommentarer:

  Normalværdien er fra. Ændringer i kommentarer vil blive behandlet ligesom ændringer i blanke tegn.

Ignorér versaltype:

  Normalværdien er fra. Ændringer i versaltype (såsom 'A' eller. 'a') vil blive behandlet ligesom ændringer i blanke tegn.

Præprocessorkommando:

  Se næste afsnit.

Præprocessorkommando for linjematchning:

  Se næste afsnit.

Prøv hårdt:

  Prøv hårdt at finde selv små fejl. (Normalt slået til.) Det er formodentlig effektivt for komplicerede og store filer, og langsomt for meget store filer.

Forsinkelse ved automatisk fortsættelse (ms):

  I automatisk fortsættelsestilstand angiver denne indstilling hvor længe resultatet for gruppen skal vises inden der hoppes til næste uløste konflikt.

Blanke tegn 2/3-fil fletningsstandard:

  Løs alle konflikter med blanke tegn ved at vælge den angivne fil. (Normalværdien er manuelt valg.) Nyttigt når blanke tegn virkelig ikke er vigtige i mange filer. Hvis du kun behøver dette af og til er det bedre at bruge "Vælg A/B/C til alle uløste konflikter med blanke tegn" i flet-menuen. Bemærk at hvis du aktiverer enten "Ignorér tal" eller "Ignorér C/C++ kommentarer" så anvendes dette auto-valg også på konflikter i tal eller kommentarer.

#### Mappefletning

Disse valgmulighederne har at gøre med gennemsøgning af mappen og håndtering af sammenfletningen: Se Mappesammenligning og sammenfletning for detaljer.

Der er endnu en valgmulighed her som også er relevant for at gemme enkelte filer:

Sikkerhedskopiér filer:

  Når en fil gemmes og en ældre version allerede findes, ændres originalversionens navn med tilføjelse af filendelsen ".orig". Hvis en gammel sikkerhedskopi med filendelsen "orig" allerede findes fjernes den uden sikkerhedskopiering.

#### Diverse

(Disse tilvalg og handlinger er tilgængelige i menuerne eller værktøjslinjen.)

Vis linjenummer:

  Du kan vælge om linjenummer skal vises for inddatafilerne.

Vis mellemrum og tabulatortegn i sammenligning:

  Sommetider er synlige mellemrum og tabulatortegn forstyrrende. Du kan slå dette fra.

Vis blanke tegn:

  Slå dette fra for at undertrykke al fremhævning af ændringer der kun er i blanke tegn i teksten eller overblikssøjlerne. (Bemærk at dette også gælder ændringer i tal eller kommentarer hvis tilvalgene "Ignorér tal" eller "Ignorér C/C++ kommentarer" er aktive.)

Overblikstilvalg:

  Disse valg er kun tilstede når du sammenligner tre filer. I normal tilstand vises alle forskelle i en enkeltfarve-kodet overblikssøjle. Men sommetider er du specielt interesseret i forskellen mellem kun to af disse tre filer. Valg af "A mod. B", "A mod. C" eller "B mod C"-overblik vil vise en anden overblikssøjle med den krævede information ved siden af det normale overblik.

Tekstombrydning af diff-vinduer:

  Ombryd linjer når deres længde ville have været større end vinduets bredde.

Vis vindue A/B/C:

  Sommetider vil du bruge skærmpladsen bedre for lange linjer. Skjul vinduer som ikke er vigtige. (I vinduesmenuen.)

Skift opdelingsorientering:

  Skift mellem sammenligningvinduer som vises ved siden af hinanden (A til venstre for B til venstre for C) eller ovenover hinanden (A over B over C). Det bør også hjælpe for lange linjer. (I vinduesmenuen.)

Start sammenfletning hurtigt:

  Sommetider kigger du på forskelle, og bestemmer dig for at sammenflette. "Flet markerede filer" i menuen Flet virker også selvom du kun sammenligner to filer. Et enkelklik starter sammenfletningen og bruger filnavnet på den sidste inddatafil som standard udskriftsfilnavn. (Når dette bruges til at genstarte en sammenfletning, beholdes udskriftsfilnavnet.)

#### Indstil genvejstaster

For øjeblikket understøtter kun KDE-versionen indstillelige genvejstaster (Menuen Opsætning -> Indstil genveje...)

### Præprocessorkommandoer

KDiff3 understøtter to præprocessor flag.

Præprocessorkommando:

  Når en fil læses, sendes den gennem denne eksterne kommando. Udskriften fra denne kommando vises i stedet for den oprindelige fil. Du kan skrive din egen præprocessor som opfylder dine specielle behov. Brug dette for at fjerne forstyrrende dele af filen, eller for automatisk at korrigere indrykning, osv.

Præprocessorkommando for linjematchning:

  Når en fil læses, sendes den via denne eksterne kommando. Hvis en præprocessorkommando (se ovenfor) også angives er udskriften fra præprocessoren input til kommandoen for linjematchning. Udskriften bruges kun under linjematchningsfasen af analysen. Du kan skrive din egen præprocessor som opfylder dine specielle behov. Hvert inddatalinje skal have en tilsvarende uddatalinje.

Idéen er at tillade brugeren større fleksibilitet mens diff-resultatet indstilles. Men dette kræver et eksternt program, og mange brugere ønsker ikke selv at skrive et sådant. Heldigvis er det meget ofte sådan at `sed` or `perl` vil kunne klare det.

Eksempel: Simpelt testtilfælde: Betragt en fil a.txt (6 linjer):

          aa
          ba
          ca
          da
          ea
          fa

Og filen b.txt (3 linjer):

          cg
          dg
          eg

Uden en præprocessor ville følgende linjer blive placeret ved siden af hinanden:

          aa - cg
          ba - dg
          ca - eg
          da
          ea
          fa

Dette er formodentlig ikke ønskværdit da det første bogstav indeholder den egentlige interessante information. For at hjælpe den matchende algoritme til at ignorere det andet bogstav kan vi bruge en præprocessor linjematchningskommando, der erstatter 'g' med 'a':

       sed 's/g/a/'

Med denne kommando ville resultatet af sammenligningen være:

          aa
          ba
          ca - cg
          da - dg
          ea - eg
          fa

Internt ser den matchende algoritme filerne efter at have køre linjematchningspræprocessoren, men på skærmen er filen uændret. (Den normale præprocessor ville også ændre data på skærmen.)

#### Basal `sed`

Dette afsnit introducerer kun nogle meget basale egenskaber for `sed`. For mere information se info:/sed eller http://www.gnu.org/software/sed/manual/html_mono/sed.html. En prækompileret udgave for Windows kan findes på http://unxutils.sourceforge.net. Bemærk at de følgende eksempler antager at `sed`-kommandoen er i en mappe i PATH-miljøvariablen. Hvis dette ikke er tilfældet, skal du angive den fulde absolutte sti for kommandoen. Bemærk også at de følgende eksempler bruger enkelt citationstegn (') hvilket ikke vil virke for Windows. På Windows skal du bruge dobbelte citationstegn (") i stedet.

I denne sammenhæng bruges kun `sed`-substitutkommandoen:

       sed 's/REGEXP/REPLACEMENT/FLAGS'

Før du bruger en ny kommando indenfor KDiff3, skal du først teste den i en konsol. Her er `echo`-kommandoen nyttig. Eksempel:

       echo abrakadabra | sed 's/a/o/'
       -> obrakadabra

Dette eksempel viser en meget simpel sed-kommando der erstatter den første forekomst af "a" med "o". Hvis du ønsker at erstattet alle forekomster så har du brug for "g"-flaget:

       echo abrakadabra | sed 's/a/o/g'
       -> obrokodobro

"|"-symbolet er pipe-kommandoen der overfører uddata fra den tidligere kommando til inddata for den følgende kommando. Hvis du ønsker at teste med en længere fil så kan du bruge `cat` på Unix-lignende systemer eller `type` på Windows-lignende systemer. `sed` vil udføre substitutionen for hver linje.

    cat filnavn | sed options

#### Eksempler på `sed`-brug i KDiff3

##### Ignorering af andre typer kommentarer

For øjeblikket forstår KDiff3 kun C/C++ kommentarer. Ved brug af en linjematchende præprocessor kommando kan du også ignorere andre typer kommentarer, ved at konvertere dem til C/C++-kommentarer. Eksempel: For at ignorere kommentarer der starter med "#", vil du gerne konvertere dem til "//". Bemærk at du også skal aktivere "Ignorér C/C++-kommentarer" for at få en virkning. En passende linjematchende præprocessorkommando ville være:

       sed 's/#/\/\//'

Idet "/"-tegnet har en speciel betydning for `sed`, er det nødvendigt at placere "\"-tegnet før hvert "/" i erstatningsstrengen. Sommetider kræves "\" for at tilføjer eller fjerne en speciel betydning af bestemte tegn. Enkelte citationstegn (') før og efter substitutionkommandoen er vigtige nu, fordi elleres ville skallen forsøge at fortolke nogle specielle tegn såsom '#', '$' or '\' før de videregives til `sed`. På Windows skal du bruge dobbelte citationstegn (") her. Windows substituere andre tegn såsom '%', så måske virker det ikke.

##### Ikke versalfølsom Diff

Brug følgende linjematchende præprocessorkommando til at konvertere al inddata til store bogstaver:

       sed 's/\(.*\)/\U\1/'

Her er ".*" et regulært udtryk der matcher enhver streng og i denne sammenhæng matcher alle tegn i linjen. "\1" i erstatningsstrengen refererer til den matchende tekst indenfor det første par af "\(" og "\)". "\U" konverterer den indsatte tekst til store bogstaver.

##### Ignorering af nøgleord for versionskontrol

CVS og andre versionskontrolsystemer bruger adskillige nøgleord til at indsætte automatisk genererede strenge (info:/cvs/Keyword substitution). De følger alle mønstret "$KEYWORD genereret tekst$". Vi har nu brug for en linjematchende præprocessorkommando der kun fjerne den genererede tekst:

       sed 's/\$\(Revision\|Author\|Log\|Header\|Date\).*\$/\$\1\$/'

"\|" adskiller de mulige nøgleord. Du vil måske ønske at ændre denne liste efter behov. "\" før "$" er nødvendigt fordi ellers matcher "$" slutningen af linjen.

Mens du eksperimenterer med `sed` kommer du måske til at forstå og endog at kunne lide disse regulære udtryk. De er nyttige fordi der er mange andre programmer der også understøtter lignende ting.

##### Ignorér cifre

Ignorering af tal er rent faktisk et indbygget valg. Men som endnu et eksempel, så er dette hvordan det ville se ud som en linjematchende præprocessorkommando.

       sed 's/[0123456789.-]//g'

Alle tegn mellem '[' og ']' matcher og vil blive erstattet med ingenting.

##### Ignorering af visse søjler

Sommetider er en tekst meget strengt formateret, og indeholder søjler som du altid ønsker at ignorere, mens der er andre søjler du ønsker at bevare til analyse. I det følgende eksempel ignoreres de første fem søjler (tegn), de næste ti søjler bevares, så ignoreres fem søjler igen og resten af linjen bevares.

       sed 's/.....\(..........\).....\(.*\)/\1\2/'

Hver prik '.' matcher et enkelt tegn. "\1" og "\2" i erstatningsstrengen refererer til den matchede tekst indenfor det første og andet par af "\(" og "\)" der betegner den tekst der skal bevares.

##### Kombination af flere substitutioner

Sommetider ønsker du at anvende flere substitutioner på én gang. Du kan så bruge semikolon ';' til at adskille disse fra hinanden. Eksempel:

    echo abrakadabra | sed 's/a/o/g;s/\(.*\)/\U\1/'
       -> OBROKODOBRO

##### Brug af `perl` i stedet for `sed`

I stedet for `sed` vil du måske ønske at bruge noget andet såsom `perl`.

       perl -p -e 's/REGEXP/REPLACEMENT/FLAGS'

Men nogle detaljer er anderledes for `perl`. Bemærk at hvor `sed` behøvede "\(" og "\)" bruger `perl` den simplere "(" and ")" uden forudgående '\'. Eksempel:

    sed 's/\(.*\)/\U\1/'
       perl -p -e 's/(.*)/\U\1/'

#### Rækkefølge for præprocessor-udførsel

Data sendes gennem alle interne og eksterne præprocessorer i følgende rækkefølge:

- Normal præprocessor,

- Præprocessor for linjematchning,

- Ignorér versaler (konvertér til store bogstaver),

- Detektion af C/C++ kommentarer,

- Ignorér cifre,

- Ignorér blanke tegn

Data efter den normale præprocessor vil blive bevaret til visning og indfletning. De andre operationer ændrer kun de data som den linjematchende diff-algoritme ser.

I de sjældne tilfælde hvor du bruger en normal præprocessor, bemærk at den linjematchende præprocessor ser uddata fra den normale præprocessor som inddata.

#### Advarsel

Præprocessorkommandoer er ofte meget nyttige, men som med ethvert valg der ændrer dine tekster eller skjuler visse forskelle automatisk, kan du ved et uheld komme til at overse visse forskelle og i det værste tilfælde ødelægge vigtige data.

Derfor vil KDiff3 fortælle dig dette under er normal indfletning hvis en normal præprocessorkommando bliver brugt, og spørge dig om det skal deaktiveres eller ej. Men den vil ikke advare dig mod at en linjematchende præprocessorkommando er aktiv. Indfletningen vil ikke blive gjort færdig før alle konflikter er løst. Hvis du deaktiverede "Vis blanke tegn" så vil de forskelle der blev fjernet med den linjematchende præprocessorkommando også være usynlige. Hvis Gem-knappen forbliver deaktiveret under en indfletning (på grund af tilbageværende konflikter), så sørg for at aktivere "Vis blanke tegn". Hvis du ikke ønsker at indflette disse mindre vigtige forskelle manuelt kan du vælge "Vælg [A|B|C] for alle uløste konflikter med blanke tegn" i indfletningsmenuen.

## Mappesammenligning og sammenfletning med KDiff3

### Indledning

Ofte skal programmører ændre mange filer i en mappe for at opnå deres formål. For at opnå dette lader KDiff3 dig også sammenligne og sammenflette hele mapper rekursivt!

Selv om sammenligning og sammenfletning af mapper synes at være ganske selvklart, er der flere detaljer som du bør kende til. Det vigtigste er naturligvis det faktum at mange filer nu kan påvirkes af hver handling. Hvis du ikke har sikkerhedskopier af originaldata, kan det være meget svært eller til og med umuligt at gå tilbage til originaltilstanden. Så inden du påbegynder en sammenfletning, skal du sørge for at data er sikrede, og at det er muligt at nulstille. Om du laver et arkiv, eller bruger et versionskontrolsystem er din egen beslutning, men til og med erfarne programmører og integratører behøver ind i mellem gammel kildekode. Bemærk også at selvom jeg (forfatteren til KDiff3) forsøger at gøre mit bedste, kan jeg ikke garantere at der ikke er fejl. Ifølge GNU GPL er der INGEN GARANTI af nogen slags for dette program. Så vær ydmyg, og husk altid:

> At fejle er menneskeligt, men for at virkelig lave rod i det behøves en maskine.

Så dette er hvad programmet kan gøre for dig: KDiff3 ...

- ... læser og sammenligner to eller tre mapper rekursivt,

- ... håndterer symbolske link særskilt,

- ... lader dig bladre gennem filer med et dobbeltklik,

- ... foreslår en sammenfletningsmulighed for hvert objekt, som du kan ændre inden mappesammenfletningen startes,

- ... lader dig simulere sammenfletningen og giver en liste af handlingerne som ville ske, uden at virkelig gøre dem,

- ... lader dig udføre sammenfletningen, og lader dig bestemme hvornår manuel interaktion behøves,

- ... lader dig køre den valgte operation for alle punkter (tasten F7) eller det valgte punkt (tasten F6),

- ... lader dig fortsætte sammenfletningen efter manuel interaktion med tasten F7,

- ... laver sikkerhedskopier, hvis du vil,med filendelsen ".orig".

- ...

### Start mappesammenligning eller sammenfletning

Dette ligner meget sammenfletning og sammenligning af en enkelt fil. Du skal kun angive mapper på kommandolinjen eller i dialogen for filåbning.

#### Sammenlign eller sammenflet to mapper:

    kdiff3 kat1 kat2
       kdiff3 kat1 kat2 -o målmappe

Hvis ingen målmappe angives, anvender KDiff3 kat2.

#### Sammenlign eller sammenflet tre mapper:

    kdiff3 kat1 kat2 kat3
       kdiff3 kat1 kat2 kat3 -o målmappe

Når tre mapper sammenflettes, bruges kat1 som basis for sammenfletningen. Hvis ingen målmappe angives, bruger KDiff3 kat3 som målmappe for sammenfletningen.

Bemærk at kun sammenligningen startes automatisk, ikke sammenfletningen. For det skal du først vælge et menupunkt eller tasten F7. (Mere information om det senere.)

### Synlig information

Mens mapperne læses vises et meddelelsesfelt som informerer dig om forløbet. Hvis du afbryder mappesøgningen, vises kun filer som hidtil er sammenlignet.

Når mappesøgningen er færdig, viser KDiff3 et listefelt med tilbageværende resultater, ...

... og detaljer om det markerede punkt til højre:

#### Navnesøjlen

Hver fil og mappe som blev fundet under søgningen vises her i et træ. Du kan vælge et punkt ved at klikke en gang på det med musen.

Mapperne er normalt lukkede. Du kan ekspandere og kollapse dem ved at klikke på "+"/"-", eller ved at dobbeltklikke på punktet eller ved at bruge tasterne venstre pil og højre pil. Menuen "Mappe" indeholder også to valgmuligheder "Fold alle undermapper sammen" og "Ekspandér alle undermapper" som du kan bruge til at kollapse eller ekspandere alle mapper på en gang.

Hvis du dobbeltklikker på et filpunkt, udføres filsammenligning og sammenligningvinduet for filer vises.

Ikonen i navnesøjlen svarer til filtypen i den første mappe ("A"). Den kan være en af disse:

- Normal fil

- Normal mappe (mappeikon)

- Link til en fil (filikon med en link-pil)

- Link til en mappe (mappeikon med en link-pil)

Hvis filtypen er anderledes i de øvrige mapper, ses det i søjlerne A/B/C og i vinduet som viser detaljerne om det markerede punkt. Bemærk at i disse tilfælde kan ingen sammenfletningshandling vælges automatisk. Når sammenfletningen startes, informeres brugeren om denne slags problemer.

#### Søjlerne A/B/C og farvesammensætninger

Som det ses i billedet ovenfor, bruges farverne rød, grøn, gul og sort i søjlerne A/B/C.

- Sort: Dette punkt findes ikke i denne mappe.

- Grøn: Nyeste punkt.

- Gul: Ældre end grøn, nyere end rød.

- Rød: Ældst punkt.

Men for punkter som er identiske i sammenligningen, er farven også identisk selvom alderen ikke er det.

Mapper anses for at være ens hvis alle objekter de indeholder er ens. Så har de også samme farve. Alderen på en mappe spiller ingen rolle for dens farve.

Idéen til denne farvesammensætning fandt jeg i dirdiff. Farverne svarer til farverne for et blad, som er grønt i begyndelsen, derefter bliver gult og til sidst rødt når det er gammelt.

#### Handlingssøjlen

Efter at have sammenlignet mapperne evaluerer KDiff3 også et forslag til en sammenfletningshandling. Det vises i søjlen "Handling". Du kan ændre den ved at klikke på handlingen du vil ændre. En lille menu dukker op og lader dig vælge en handling for punktet. (Du kan også vælge de mest nødvendige operationer via tastaturet. Ctrl+1/2/3/4/Del vil vælge henholdsvis A/B/C/Flet/Slet om muligt.) Handlingen udføres under sammenfletningen. Hvilke handlinger der er tilgængelige afhænger af objektet og sammenfletningstilstanden som bruges. Sammenfletningstilstanden er en af:

- Sammenfletning af tre mapper ("A" behandles som ældste basis for begge).

- Sammenfletning af to mapper.

- Tomappes-synkroniseringstilstand (aktiveres med punktet "Synkronisér mapper").

Ved tremappers-sammenfletning er den handling der foreslås: Hvis for et objekt...

- ... alle tre mapperne er ens: Kopiér fra C

- ... A og C er ens men B er det ikke: Kopiér fra B (eller hvis B ikke findes, fjern hvis det findes)

- ... A og B er ens men C er det ikke: Kopiér fra C (eller hvis C ikke findes, fjern målet hvis det findes)

- ... B og C er ens men A er det ikke: Kopiér fra C (eller hvis C ikke findes, fjern målet hvis det findes)

- ... kun A findes: Fjern målet (hvis det findes)

- ... kun B findes: Kopiér fra B

- ... kun C findes: Kopiér fra C

- ... A, B og C er ikke ens: Sammenflet

- ... A, B og C har ikke samme filtype (f.eks. A er en mappe, B er en fil): "Fejl: Konflikt i filtyper". Så længe sådanne objekter findes, kan mappesammenfletningen ikke startes.

Ved tomappers sammenfletning er den foreslåede handling: Hvis for et objekt...

- ... begge mapper er ens: Kopiér fra B

- ... A findes men B ikke: Kopiér fra A

- ... B findes men A ikke: Kopiér fra B

- ... A og B findes men er ikke ens: Sammenflet

- ... A og B har ikke samme filtype (f.eks. A er en mappe, B er en fil): "Fejl: Konflikt i filtyper". Hvis sådanne objekter findes, kan mappesammenfletningen ikke startes.

Synkroniseringstilstand er kun aktiv hvis to mapper og ingen eksplicit målmappe angives, og hvis punktet "Synkronisér mapper" er aktivt. KDiff3 vælger så en standardhandling så begge mapper er ens bagefter. Hvis for et objekt...

- ... begge mapper er ens: Gøres ingenting.

- ... A findes, men B ikke: Kopiér A til B

- ... B findes, men A ikke: Kopiér B til A

- ... A og B findes, men er ikke ens: Sammenflet og gem resultatet i begge mapper. (For brugeren er det synlige filnavnet for at gemme B, men derefter kopierer KDiff3 også B til A.)

- ... A og B har ikke samme filtype (f.eks. A er en mappe, B er en fil): "Fejl: Konflikt i filtyper". Hvis sådanne objekter findes, kan mappesammenfletningen ikke startes.

Når to mapper sammenflettes og punktet "Kopiér nyere i stedet for at sammenflette" er markeret, kigger KDiff3 på datoen og foreslår at vælge den nyeste fil. Hvis filerne ikke er ens men har samme dato, indeholder handlingen "Fejl: Dato er ens men filerne er det ikke." Hvis sådanne objekter findes, kan mappesammenfletningen ikke startes.

#### Statussøjlen

Under sammenfletningen behandles en fil af gangen. Statussøjlen viser "Færdig" for objekter hvor sammenfletningshandlingen er lykkedes, og en anden tekst hvis noget uventet indtraf. Når en sammenfletning er færdig, bør du lave en sidste kontrol for at se at status for alle objekter er acceptabel.

#### Statistiske søjler

Når filsammenligningstilstanden "Fuld analyse" er aktiveret i indstillingerne, så vil KDiff3 vise ekstra søjler der indeholder antallet af uløste, læste, ikke blanke og blanke konflikter. (Løst-søjlen vil kun blive vist når tre mapper sammenlignes eller indflettes.)

### Udfør en sammenfletning

Du kan enten sammenflette det valgte punkt (fil eller mappe), eller alle punkter. Når du har lavet alle valg af handlinger (også i alle undermapper), kan du udføre sammenfletningen.

Vær klar over at hvis du ikke eksplicit angav en målmappe, bliver målet "C" i tremappestilstand, "B" i tomappestilstand, og i synkroniseringstilstand er det "A" og/eller "B".

Hvis du også har angivet en målmappe, kontrollér at alle objekter som skal findes i udskriften findes i træet. Der er nogle valgmuligheder som får visse objekter til at blive udeladt fra mappesammenligningen og sammenfletningen. Kontrollér disse valgmuligheder for at undgå ubehagelige overraskelser:

- "Rekursive mapper": Hvis det er fra, findes objekter i undermapper ikke.

- "Mønster" eller "undtagelsesmønster": Inkludér eller undtag objekter som matcher.

- "Undtag skjulte filer"

- "Kun forskelle på listen": Filer som matcher i alle mapper vises ikke i træet, og altså heller ikke i målet.

(I nuværende version skal du gøre en ekstra skanning selv via menuen "Mappe"->"Skan igen", efter at have ændret tilvalg som påvirker mappeskanningen.)

Hvis du er tilfreds indtil videre, er resten enkelt.

For at sammenflette alle punkter: Vælg "Start/fortsæt mappesammenfletning" i "Mappe"-menuen eller tryk på F7 (som er genvejstatsen). For kun at flette det nuværende punkt: Vælg "Kør operation for dette punkt" eller tryk på F6.

Hvis visse objekter med ugyldige filtyper stadigvæk findes, på grund af filtyper med konflikter, vises et meddelelsefelt og objektet udpeges, så du kan vælge en gyldig handling for objektet.

Hvis du sammenfletter alle punkter vises en dialog som giver dig valgmulighederne "Gør det", "Simulér det" og "Annullér".

- Vælg "Simulér det" hvis du vil se hvad der ville blive gjort uden virkelig at gøre det. En udførlig liste med alle handlinger vises.

- Ellers vælges "Gør det" for virkelig at udføre sammenfletningen.

Derefter kører KDiff3 den angivne handling for alle objekter. Hvis manuel interaktion kræves (sammenfletning af en enkelt fil), vises et sammenfletningsvindue (se det store skærmaftryk).

Når du er klar med en fil, vælges igen "Start eller fortsæt mappesammenfletning" eller der trykkes på F7. Hvis du ikke har gemt endnu, beder en dialog dig om at gøre det. Derefter fortsætter KDiff3 til næste objekt.

Når KDiff3 støder på et fejl, meddeles dette og udførlig statusinformation vises. Længst nede på listen er der nogle fejlmeddelelser som bør hjælpe dig til at forstå grunden til problemet. Når du fortsætter sammenfletningen (tasten F7), giver KDiff3 dig valget mellem at forsøge igen eller hoppe over objektet som forårsagede problemet. Det betyder at du kan vælge en anden handling, eller løse problemet på anden måde, inden du fortsætter.

Når sammenfletningen er færdig, informerer KDiff3 dig med et meddelelsesfelt.

Hvis nogen punkter blev sammenflettet individuelt så husker KDiff3 dette (mens denne flette-session er i gang), og fletter dem ikke igen når den senere fletning for alle punkter foregår. Selv når sammenfletningen blev sprunget over eller intet blev gemt tæller disse punkter som færdige. Kun når du ændrer indfletningsoperationen vil punktet blive sammenflettet igen.

### Tilvalg for at sammenligne og sammenflette mapper

Indstilling af KDiff3 (menuen "Opsætning" -> "Indstil KDiff3") har nu en side som hedder "Mappesammenfletning" med følgende punkter:

Rekursive mapper:

  Vælg om mapper skal gennemsøges rekursivt.

Mønster for filer:

  Kun filer som matcher et mønstret her tilføjes til træet. Mere end et mønster kan angives ved at bruge semikolon ";" som skilletegn. Gyldige jokertegn: '*' og '?'. (f.eks. "*.cpp;*.h"). Normalværdien er "*". Mapper behøver ikke at matche mønstret.

Undtagelsesmønster for filer:

  Filer og mapper som matcher et mønster undtages fra træet. Mere end et mønster kan angives ved at bruge semikolon ";" som skilletegn. Gyldige jokertegn: '*' og '?'. (f.eks. "*.cpp;*.h"). Normalværdien er "*.orig;*.o".

Brug .cvsignore:

  Ignorér filer og mapper som også skulle ignoreres af CVS. Mange automatisk genererede filer ignoreres af CVS. Den store fordel er at dette kan være mappespecifikt via en lokal ".cvsignore" fil. (Se info:/cvs/cvsignore.)

Find efter skjulte filer og mapper:

  For visse filsystemer har filer en "Skjult"-attribut. For andre systemer skjules et filnavn som begynder med et punktum. Denne valgmulighed lader dig bestemme om disse filer skal indgå i træet eller ej. Normalværdien er til.

Følg fillink:

  For link til filer: Hvis deaktiveret, sammenlignes de symbolske link. Hvis aktiveret, sammenlignes filerne bagved linkene. Normalværdien er fra.

Følg mappelink:

  For link til mapper: Hvis det er deaktiveret, sammenlignes symbolske link. Hvis det er aktiveret behandles linket som en mappe og skannes rekursivt. (Bemærk at programmet ikke kontrollerer om linket er "rekursivt". En mappe som indeholder et link til samme mappe vil forårsage en uendelig løkke, og efter en vis tid når stakken bliver fuld eller hukommelsen er slut, bryder programmet sammen.) Normalværdien er fra.

Kun forskelle på listen:

  Kun objekter som ikke er ens i alle inddatamapper er på listen, og kun ændrede filer er synlige. Derfor kopieres filer ikke som er ens i alle mapper ved en sammenfletning og hvis målmappen ikke indeholder filerne før sammenfletningen, kan du muligvis senere mangle nogle filer. (Tilvalget bliver formodentlig ændret i en senere version.) Normalværdien er fra.

Filsammenligningstilstand:

  Binær sammenligning:

    Dette er standardsammenligningstilstanden.

  Fuld analyse:

    Udfør en fuld analyse for hver fil og vis de statistiske informationssøjler. (Antal løste, uløste, ikke blanke og blanke konflikter.) Den fulde analyse er langsommere end en simpel binær analyse, og meget langsommere når den bruges på filer der ikke indeholder tekst. (Angiv de passende fil-antimønstre.)

  Stol på ændringsdato:

    Hvis du sammenligner store mapper via et langsomt netværk, kan det gå hurtigere kun at sammenligne ændringsdato og fillængde. Men hastighedsforbedringen kommer med prisen af en lille usikkerhed. Brug dette med forsigtighed. Normalværdien er fra.

  Stol på størrelsen:

    Ligesom at stile på ændringsdatoen. Ingen egentlig sammenligning foregår. To filer betragtes som ens hvis deres filstørrelser er ens. Dette er nyttigt når filkopieringsoperationen ikke bevarer ændringsdatoen. Brug dette med forsigtighed. Normalværdien er fra.

Synkronisér mapper:

  Aktiverer "synkroniseringstilstand" når to mapper sammenlignes og ingen eksplicit målmappe angives. I denne tilstand vælges de foreslåede handlinger så begge kildemapperne er ens bagefter. Sammenfletningsresultatet skrives også til begge mapper. Normalværdien er fra.

Kopiér nyere i stedet for at sammenflette:

  I stedet for at sammenflette kopieres den foreslåede handling den nyere kilden hvis der er sket om ændringer. (Anses for at være usikkert, eftersom det betyder at man antager at den anden fil ikke også er redigeret. Tjek for at være sikker i hvert enkelt tilfælde.) Normalværdien er fra.

Sikkerhedskopiér filer:

  Hvis en fil eller hel mappe erstattes af en anden eller fjernes, så ændres originalversionens navn med tilføjelsen af filendelsen ".orig". Hvis en gammel sikkerhedskopi med filendelsen "orig" allerede findes slettes den uden sikkerhedskopiering. Dette gælder også normal sammenfletning af enkelte filer, ikke kun sammenfletningstilstand for mapper. Normalværdien er til.

### Øvrige funktioner

#### Opdelt eller fuldskærmstilstand

Sædvanligvis forbliver listevinduet for mappesammenfletning synligt mens en enkelt fil sammenlignes eller sammenflettes. Du kan flytte linjen som opdeler fillisten fra vinduet for tekstsammenligning med musen. Hvis du ikke vil gøre dette, kan du deaktivere "Opdelt skærmvisning" i menuen "Vindue" for at skifte mellem fillisten og vinduet for tekstsammenligning, som så optager hele vinduet.

#### Sammenlign og sammenflette en enkelt fil

Du foretrækker formodentlig et almindeligt dobbeltklik på musen for at sammenligne en fil. Ikke desto mindre er der også en valgmulighed i menuen "Mappe". Du kan også sammenflette en enkelt fil direkte, uden at starte mappesammenfletningen via "Sammenflet markerede filer" i menuen "Sammenflet". Når resultatet gemmes, sættes status til klar, og filen sammenflettes ikke igen hvis en mappesammenfletning startes.

Men bemærk at statusinformationen går tabt når du kører en mappeskanning igen: "Skan igen" i menuen "Mappe".

## Diverse emner

### Netværksgennemsigtighed via KIO

#### I/O-slaver

KDE understøtter netværksgennemsigtighed via I/O-slaver. KDiff3 bruger dem til at indlæse inddatafiler og gennemsøge mapper. Det betyder at du kan angive filer og mapper på lokal- og fjern-ressourcer via URL'er.

Eksempel:

    kdiff3 test.cpp  ftp://ftp.langtbortistan.org/test.cpp
       kdiff3 tar:/home/hakker/arkiv.tar.gz/kat ./kat

Den første linje sammenligner en lokal fil med en fil på en FTP-server. Den anden linje sammenligner en mappe i et komprimeret arkiv med en lokal mappe.

Andre I/O-slaver som er interessante er:

- Filer fra WWW (http:),

- Filer fra FTP (ftp:),

- Krypteret filoverførsel (fish:, sftp:),

- Ressourcer fra Windows (smb:),

- Lokale filer (file:),

Andre ting som er mulige, men formodentlig mindre nyttige, er:

- Manualsider (man:),

- Infosider (info:),

#### Hvordan man skriver URL'er

En URL har en anderledes syntaks sammenlignet med søgestier til lokale filer og mapper. Der skal tages hensyn til visse ting:

- En søgesti kan være relativ, og kan indeholde "." eller "..". Det er ikke muligt for URL'er, som altid er absolutte.

- Specialtegn skal skrives med særlige "escape". ("#" -> "%23", mellemrum -> "%20", osv.) For eksempel skulle en fil med navnet "/#foo#" have URL'en "file:/%23foo%23".

- Når URL'er ikke virker som forventet, så forsøg at åbne dem i Konqueror først.

#### Muligheder med I/O-slaver

Netværksgennemsigtighed har en bagdel: Ikke alle ressourcer har samme muligheder.

Sommetider skyldes det serverens filsystem, sommetider protokollen. Her er en kort liste med begrænsninger:

- Sommetider er der ikke støtte for link.

- Eller der er ingen måde at skelne mellem om et link peger på en fil eller mappe, der antages altid en fil (ftp:, sftp:).

- Kan ikke altid afgøre filstørrelsen.

- Begrænset støtte for rettigheder.

- Ingen mulighed at ændre rettigheder eller ændringstid, så rettigheder eller tiden for en kopi adskiller sig fra originalen. (Se tilvalget "Stol på størrelse".) (Ændring af tilladelser eller ændringstidspunkt er kun muligt for lokale filer.)

### Brug &kdiff3; som en Kpart

&kdiff3; er en Kpart. For øjeblikket implementeres grænsefladen KParts::ReadOnlyPart.

Hovedbrugen er til forskelsvisning i KDevelop. KDevelop starter altid den interne forskelsvisning først. For at bruge KDiff3, klikkes med højre museknap i forskelsvisningens vindue og "Vis i KDiff3Part" vælges i den sammenhængsafhængige menu.

KDiff3 kræver normalt to fuldstændige filer som inddata. Når den bruges som en part, antager KDiff3 at inddatafilen er en patch-fil med det forenede format. KDiff3 henter derefter originalfilernes navne i patch-filen. I det mindste en af de to filer skal være tilgængelig. KDiff3 starter så kommandoen `patch` for at genoprette den anden fil.

Du kan vælge en patch-fil i Konqueror og vælge "Forhåndsvis i" - "Kdiff3Part" i den sammenhængsafhængige menu. Vær klar over om at det ikke virker hvis ingen af originalfilerne er tilgængelige, og er ikke tilforladeligt hvis originalfilen eller filerne er ændret siden patch-filen blev oprettet.

Når den kører som en Kpart sørger KDiff3 kun for sammenligning mellem to filer, en meget lille værktøjslinje og menu. Sammenfletning eller mappesammenligning understøttes ikke i dette tilfælde.

## Spørgsmål og svar

&reporting.bugs; &updating.documentation;

Hvorfor hedder den "KDiff3"?

Værktøjer som hedder "KDiff" og "KDiff2" (som nu hedder "Kompare") fandtes allerede. Desuden skal "KDiff3" antyde at programmet kan sammenflette ligesom værktøjet "diff3" fra samlingen med diff-værktøj.

Hvorfor er licensen GPL?

Jeg har brugt GPL-programmer i meget lang tid nu, og lært mig meget ved at kigge på en hel del af kildekoden. Altså er dette min "tak" til alle de programmører som også gjorde dette eller vil gøre det samme.

Visse knapper og funktioner mangler. Hvad er galt?

Du kompilerede fra kildekode, men angav formodentlig ikke det rigtige KDE-præfiks med configure. Normalt vil configure installere i /usr/local, men så kan KDE ikke finde ressourcefilerne for brugergrænsefladen (dvs. kdiff3ui.rc). Filen README indeholder mere information om rigtig præfiks.

Ofte vises linjer som ligner men ikke er identiske med hinanden, men ikke altid. Hvorfor?

Linjer hvor kun antal blanke tegn er forskellige behandles som "ens" i første omgang, mens blot et anderledes blankt tegn gør at linjerne er "forskellige". Hvis lignende linjer er ved siden af hinanden, er dette i virkeligheden et tilfælde men det sker heldigvis som regel ikke.

Hvorfor skal alle konflikter være løste inden sammenfletningsresultatet kan gemmes?

For hver ens eller forskelligt afsnit husker editoren i vinduet med sammenfletningsresultatet hvor det begynder og slutter. Det er nødvendigt eftersom konflikter kan løses op manuelt ved helt enkelt at vælge kildeknappen (A, B eller C). Informationen går tabt når filen gemmes som tekst, og det er for besværligt at oprette et specielt filformat som understøtter at gemme og genoprette al nødvendig information.

Hvorfor har editoren i resultatvinduet for sammenfletning ikke en "fortryd"-funktion?

Hidtil har det været for besværligt. Du kan altid genoprette en version fra en kilde (A, B eller C) ved at klikke på den tilsvarende knap. For større redigering, anbefales brug af en anden editor alligevel.

Da jeg fjernede noget tekst, vistes pludseligt "<Ingen kildelinje>" og det kan ikke fjernes. Hvad betyder det og hvordan kan man fjerne det?

For hvert ens eller forskelligt afsnit husker editoren i vinduet med sammenfletningsresultatet hvor det begynder og slutter. "<Ingen kildelinje>" betyder at der ikke er noget tilbage i et afsnit, ikke engang et nylinjetegn. Dette kan indtræffe enten ved automatisk sammenfletning eller efter redigering. Det er ikke noget problem, eftersom denne information ikke er med i den gemte fil. Hvis du vil have originalkilden tilbage, markeres kilden blot (klik på sammendragssøjlen til venstre) og klik derefter på kildeknappen med indholdet som ønskes (A, B eller C).

Hvorfor understøtter KDiff3 ikke syntaksfremhævning?

KDiff3 bruger allerede mange farver til fremhævning af sammenligninger. Yderligere farvelægning ville være forvirrende. Brug en anden editor til dette.

Der er en stor mængde information her, men dit spørgsmål er alligevel ikke besvaret?

Send gerne dit spørgsmål til mig. Jeg sætter pris på alle kommentarer.

## Medvirkende og licens

&kdiff3;: Værktøj til sammenligning og sammenfletning af filer og mapper

Program ophavsret 2002-2004 Joachim Eibl joachim.eibl at gmx.de

Flere fede idéer og fejlrapporter kom fra kolleger og mange personer ude på www. Tak!

Dokumentation ophavsret © 2002-2004 Joachim Eibl joachim.eibl at gmx.de

&erik.kjaer.pedersen.credit; &underFDL; &underGPL;

## Installation

### Hvordan får man fat på &kdiff3;

Du kan hente den nyeste version af KDiff3 fra hjemmesiden http://kdiff3.sourceforge.net.

KDiff3 er også tilgængelig for andre platforme. Se hjemmesiden for detaljer.

### Krav

For at kunne bruge alle &kdiff3;'s funktioner har du brug for &kde; >3.1.

For information om hvordan KDiff3 kan køres på andre platforme end KDE, se hjemmesiden.

Du kan finde en liste med ændringer på http://kdiff3.sourceforge.net/ChangeLog eller i filen "ChangeLog" i kildekodepakken.

### Kompilering og installation

For at kompilere og installere &kdiff3; på et system med KDE, skrives følgende i basismappen for &kdiff3;'s distribution:

    % ./configure --prefix=kde-dir
    % make
    % make install

kde-dir angiver mappen hvor KDE findes på systemet. Hvis du ikke er sikker, læs filen README for detaljer.

Eftersom &kdiff3; bruger `autoconf` og `automake` bør du ikke have nogen problemer med at kompilere den. Skulle du støde på problemer, så vær venlig at rapportere dem til &kde;'s e-mail-lister.

&documentation.index;