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 en meddelelsesboks 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 en listeboks 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.

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 en meddelelseboks 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 en meddelelsesboks.
Hvis nogen punkter blev sammenflettet individuelt så husker KDiff3 dette (mens denne flette-session er igang), 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.
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".