Katalogjämförelse och sammanfogning med Kdiff3

Introduktion till katalogjämförelse och sammanfogning
Ofta måste programmerare ändra många filer i en katalog för att uppnå sina syften. För att åstadkomma detta låter Kdiff3 dig också jämföra och sammanfoga hela kataloger rekursivt!
Även om jämförelse och sammanfogning av kataloger verkar vara ganska självklart, finns det flera detaljer som du bör känna till. Det viktigaste är förstås faktum att många filer nu kan påverkas av varje åtgärd. Om du inte har säkerhetskopior av originaldata, kan det vara mycket svårt eller till och med omöjligt att återgå till originalläget. Så innan du påbörjar en sammanfogning, försäkra dig om att data är säkert, och att det är möjligt att återställa. Om du skapar ett arkiv, eller använder ett versionshanteringssystem är ditt eget beslut, men till och med erfarna programmerare och integratörer behöver ibland gammal källkod. Observera också att även om jag (upphovsmannen till Kdiff3) försöker att göra mitt bästa, kan jag inte garantera att det inte finns fel. Enligt GNU GPL finns det INGEN GARANTI av något slag för det här programmet. Så var ödmjuk, och kom alltid ihåg:
Att fela är mänskligt, men för att verkligen ställa till det behövs en dator.
Så det här är vad programmet kan göra åt dig: Kdiff3 ...
... läser och jämför två eller tre kataloger rekursivt,
... hanterar symboliska länkar särskilt,
... låter dig bläddra mellan filer med ett dubbelklick på musen,
... föreslår ett sammanfogningsalternativ för varje objekt, som du kan ändra innan katalogsammanfogningen startas,
... låter dig simulera sammanfogningen och listar åtgärderna som skulle ske, utan att verkligen göra dem,
... låter dig utföra sammanfogningen, och låter dig bestämma så fort manuell interaktion behövs,
... låter dig utföra vald åtgärd för alla objekt (tangenten F7 ) eller markerat objekt (tangenten F6),
... låter dig fortsätta sammanfogningen efter manuell interaktion med tangenten F7,
... skapar valfria säkerhetskopior, med filändelsen ".orig",
...

Starta katalogjämförelse eller sammanfogning
Det här liknar mycket sammanfogning och jämförelse av en enstaka fil. Du måste bara ange kataloger på kommandoraden eller i dialogrutan för filöppning.

Jämföra eller sammanfoga två kataloger:

kdiff3 kat1 kat2
   kdiff3 kat1 kat2 -o målkat

Om ingen målkatalog anges, använder Kdiff3 kat2.

Jämföra eller sammanfoga tre kataloger:

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

När tre kataloger sammanfogas, används kat1 som basen för sammanfogningen. Om ingen målkatalog anges, använder Kdiff3 kat3 som målkatalog för sammanfogningen.
Observera att bara jämförelsen startas automatiskt, inte sammanfogningen. För det måste du först välja ett menyalternativ eller tangenten F7. (Mer information kommer senare.)

Katalogsammanfogning av synlig information
Medan katalogerna läses visas en meddelanderuta som informerar dig om förloppet. Om du avbryter katalogavsökningen, visas bara filer som hittills har jämförts.
När katalogavsökningen är färdig, visar Kdiff3 en listruta med återstående resultat, ...
... och detaljinformation om det markerade objektet till höger:

Namnkolumnen
Varje fil och katalog som hittades under avsökningen visas här i ett träd. Du kan välja ett objekt genom att klicka en gång på det med musen.
Katalogerna är normalt ihopdragna. Du kan expandera och dra ihop dem genom att klicka på "+"/"-", genom att dubbelklicka på objektet eller genom att använda tangenterna vänsterpil och högerpil. Menyn "Katalog" innehåller också två alternativ "Dra ihop alla underkataloger" och "Expandera alla underkataloger" som du kan använda för att dra ihop eller expandera alla kataloger på en gång.
Om du dubbelklickar på ett filobjekt, utförs filjämförelsen och jämförelsefönstret för filer visas.
Ikonen i namnkolumnen motsvarar filtypen i den första katalogen ("A"). Den kan vara någon av dessa:
Normal fil
Normal katalog (katalogikon)
Länk till en fil (filikon med en länkpil)
Länk till en katalog (katalogikon med en länkpil)
Om filtypen är annorlunda i övriga kataloger, syns det i kolumnerna A/B/C och i fönstret som visar detaljinformation om det markerade objektet. Observera att i dessa fall kan inte någon sammanfogningsåtgärd väljas automatiskt. När sammanfogningen startas, informeras användaren om den här sortens problem.

Kolumnerna A/B/C och färgläggningsschemat
Som syns i bilden ovan, används färgerna röd, grön, gul och svart i kolumnerna A/B/C.
Svart: Det här objektet finns inte i den här katalogen.
Grön: Nyaste objektet.
Gul: Äldre än grön, nyare än röd.
Röd: Äldsta objektet.
Utom för objekt som var identiska i jämförelsen, där är färgen också identisk även om åldern inte är det.
Kataloger anses vara likadana om alla objekt de innehåller är likadana. Då har de också samma färg. Åldern på en katalog spelar dock ingen roll för dess färg.
Idén för färgläggningsschemat hittade jag i dirdiff. Färgerna motsvarar färgerna hos ett löv som är grönt från början, sedan blir gult och till sist rött när det är gammalt.

Åtgärdskolumnen
Efter att ha jämfört katalogerna utvärderar Kdiff3 också ett förslag på sammanfogningsåtgärd. Det visas i kolumnen "Åtgärd". Du kan ändra den genom att klicka på åtgärden du vill ändra. En liten meny dyker upp och låter dig välja en åtgärd för objektet. (Du kan också välja den oftast använda åtgärden via tangentbordet. Ctrl+1/2/3/4/Delete väljer A/B/C/Sammanfoga/Ta bort om de är tillgängliga.) Åtgärden utförs under sammanfogningen. Vilka åtgärder som är tillgängliga beror på objektet och sammanfogningsläget som används. Sammanfogningsläget är ett av
Sammanfogning av tre kataloger ("A" behandlas som äldsta bas för båda).
Sammanfogning av två kataloger.
Tvåkatalogs synkroniseringsläge (aktiveras med alternativet "Synkronisera kataloger").
Vid trekatalogers sammanfogning är den förslagna åtgärden: Om för ett objekt...
... alla tre katalogerna är likadana: Kopiera från C
... A och C är likadana med B är det inte: Kopiera från B (eller om B inte finns, ta bort målet om det finns)
... A och B är likadana med C är det inte: Kopiera från C (eller om C inte finns, ta bort målet om det finns)
... B och C är likadana med A är det inte: Kopiera från C (eller om C inte finns, ta bort målet om det finns)
... bara A finns: Ta bort målet (om det finns)
... bara B finns: Kopiera från B
... bara C finns: Kopiera från C
... A, B och C är inte likadana: Sammanfoga
... A, B och C har inte samma filtyp (t.ex. A är en katalog, B är en fil): "Fel: Konflikt i filtyper". Medan sådana objekt finns, kan inte katalogsammanfogningen startas.
Vid tvåkatalogers sammanfogning är den förslagna åtgärden: Om för ett objekt...
... båda katalogerna är likadana: Kopiera från B
... A finns men inte B: Kopiera från A
... B finns men inte A: Kopiera från B
... A och B finns men är inte likadana: Sammanfoga
... A och B har inte samma filtyp (t.ex. A är en katalog, B är en fil): "Fel: Konflikt i filtyper". Medan sådana objekt finns, kan inte katalogsammanfogningen startas.
Synkroniseringsläge är bara aktivt om två kataloger och ingen explicit målkatalog anges, och om alternativet "Synkronisera kataloger" är aktivt. Kdiff3 väljer då en standardåtgärd så att båda katalogerna är likadana efteråt. Om för ett objekt ...
... båda katalogerna är lika: Ingenting görs.
... A finns, men inte B: Kopiera A till B
... B finns, men inte A: Kopiera B till A
... A och B finns, men är inte likadana: Sammanfoga och lagra resultatet i båda kataloger. (För användaren är det synliga filnamnet för att spara B, men därefter kopierar Kdiff3 också B till A.)
... A och B har inte samma filtyp (t.ex. A är en katalog, B är en fil): "Fel: Konflikt i filtyper". Medan sådana objekt finns, kan inte katalogsammanfogningen startas.
När två kataloger sammanfogas och alternativet "Kopiera nyare istället för att sammanfoga" är markerat, tittar Kdiff3 på datum och föreslår att välja den nyare filen. Om filerna inte är lika men har samma datum, innehåller åtgärden "Fel: Datum är lika men filerna är det inte." Medan sådana objekt finns, kan inte katalogsammanfogningen startas.

Statuskolumnen
Under sammanfogningen behandlas en fil i taget. Statuskolumnen visar "Klar" för objekt där sammanfogningsåtgärden har lyckats, och någon annan text om något oväntat inträffade. När en sammanfogning är färdig, bör du göra en sista kontroll för att se att status för alla objekt är acceptabel.

Statistikkolumner
När filjämförelseläget "Fullständig analys" är aktiverat i alternativen, visar Kdiff3 extra kolumner som innehåller antal oupplösta, upplösta, inte blanka och blanka konflikter. (Kolumnen lösta visas bara när kataloger jämförs eller sammanfogas.)

Välja listade filer
Flera alternativ påverkar vilka filer som listas här. Vissa är tillgängliga i inställningsdialogrutan. Menyn Katalog innehåller alternativen:
"Visa identiska filer": Filer som har detekterats som lika i alla indatakataloger.
"Visa olika filer": Filer som finns i två eller flera kataloger men inte är lika.
"Visa bara filer i A": Filer som bara finns i A, men inte i B eller C.
"Visa bara filer i B": Filer som bara finns i B, men inte i A eller C.
"Visa bara filer i C": Filer som bara finns i C, men inte i A eller B.
Aktivera bara alternativen "Visa" för objekten du vill lista. Om du till exempel bara vill lista alla objekt som antingen finns i A eller i B men inte i båda, måste du aktivera "Visa bara filer i A" och "Visa bara filer i B" och inaktivera alla andra ("Visa identiska filer", "Visa olika filer", "Visa bara filer i C"). Listan uppdateras omedelbart för att motsvara ändringen.
Alternativen gäller också för kataloger med ett undantag: Att inaktivera "Visa olika filer" döljer inte hela kataloger. Det fungerar bara för filer inne i dem.

Utföra en katalogsammanfogning
Du kan antingen sammanfoga markerat objekt (fil eller katalog), eller alla objekt. När du har gjort alla val av åtgärder (också i alla underkataloger), kan du utföra sammanfogningen.
Var medveten om att om du inte explicit angav en målkatalog, blir målet "C" i trekatalogsläge, "B" i tvåkatalogsläge, och i synkroniseringsläge är det "A" och/eller "B".
Om du också har angivit en målkatalog, kontrollera att alla objekt som ska finnas i utmatningen finns i trädet. Det finns några alternativ som får vissa objekt att utelämnas från katalogjämförelsen och sammanfogningen. Kontrollera dessa alternativ för att undvika obehagliga överraskningar:
"Rekursiva kataloger": Om det är av, hittas inte objekt i underkataloger.
"Mönster" eller "Undantagsmönster": Inkludera eller undanta objekt som matchar
"Undanta gömda filer"
"Lista bara skillnader": Filer som matchar i alla kataloger visas inte i trädet, och alltså inte heller i målet.
(I nuvarande version måste du göra en omsökning via menyn "Katalog" -> "Avsök igen" själv, efter att ha ändrat alternativ som påverkar katalogavsökningen.)
Om du är nöjd hittills, är resten enkelt.
För att sammanfoga alla objekt: Välj "Starta eller fortsätt katalogsammanfogning" i menyn "Katalog" eller tryck på F7 (som är snabbtangenten). För att bara sammanfoga aktuellt objekt: Välj "Utför åtgärd för aktuellt objekt" eller tryck på F6.
Om vissa objekt med ogiltiga filtyper fortfarande finns, på grund av filtyper med konflikter, visas en meddelanderuta och objekten pekas ut, så att du kan välja en giltig åtgärd för objektet.
Om du sammanfogar alla objekt visas en dialogruta som ger dig alternativen "Gör det", "Simulera det" och "Avbryt".
Välj "Simulera det" om du vill se vad som skulle göras utan att verkligen göra det. En utförlig lista med alla åtgärder visas.
Välj annars "Gör det" för att verkligen utföra sammanfogningen.
Därefter utför Kdiff3 den angivna åtgärden för alla objekt. Om manuell interaktion krävs (sammanfogning av enstaka fil), visas ett sammanfogningsfönster (se den stora skärmbilden).
När du är klar med en fil, välj återigen "Starta eller fortsätt katalogsammanfogning" eller tryck på F7. Om du inte har sparat ännu, ber en dialogruta dig att göra det. Därefter fortsätter Kdiff3 till nästa objekt.
När Kdiff3 stöter på ett fel, meddelas det och utförlig statusinformation visas. Längst ner i listan finns det några felmeddelanden som bör hjälpa dig att förstå problemets orsak. När du fortsätter sammanslagningen (tangenten F7), ger Kdiff3 dig valet att försöka igen eller hoppa över objektet som orsakade problemet. Det betyder att du kan välja en annan åtgärd, eller lösa problemet på annat sätt, innan du fortsätter.
När sammanfogningen är färdig, informerar Kdiff3 dig med en meddelanderuta.
Om vissa objekt sammanfogades individuellt, kommer Kdiff3 ihåg det (medan sammanfogningssessionen pågår), och sammanfogar dem inte igen när sammanfogningen för alla objekt utförs. Även när sammanfogningen hoppas över eller ingenting sparas räknas dessa objekt som färdiga. Bara när sammanfogningsåtgärden ändras, sammanfogas objekten igen.

Alternativ för att jämföra och sammanfoga kataloger
Inställning av Kdiff3 (menyn "Inställningar" -> "Anpassa KDiff3") har nu en sida som heter "Katalogsammanfogning" med följande alternativ:
Rekursiva kataloger:	Välj om kataloger ska sökas igenom rekursivt.
Mönster för filer:	Bara filer som matchar något mönster här läggs till i trädet. Mer än ett mönster kan anges genom att använda semikolon ";" som skiljetecken. Giltiga jokertecken: '*' och '?'. (t.ex. "*.cpp;*.h"). Normalvärdet är "*". Kataloger behöver inte matcha mönstret.
Undantagsmönster för filer:	Filer och kataloger som matchar något mönster undantas från trädet. Mer än ett mönster kan anges genom att använda semikolon ";" som skiljetecken. Giltiga jokertecken: '*' och '?'. Normalvärdet är "*.orig;*.o".
Använd .cvsignore:	Ignorera filer och kataloger som också skulle ignoreras av CVS. Många automatiskt genererade filer ignoreras av CVS. Den stora fördelen är att detta kan vara katalogspecifikt via en lokal ".cvsignore" fil. (Se info:/cvs/cvsignore.)
Sök efter gömda filer och kataloger:	För vissa filsystem har filer egenskapen "Dold". För andra system döljs ett filnamn som börjar med en punkt ("."). Alternativet låter dig bestämma om dessa filer ska ingå i trädet eller inte. Normalvärdet är på.
Följ fillänkar:	För länkar till filer: Om inaktiverad, jämförs de symboliska länkarna. Om aktiverad, jämförs filerna bakom länkarna. Normalvärdet är av.
Följ kataloglänkar:	För länkar till kataloger: Om inaktiverad, jämförs symboliska länkar. Om aktiverad behandlas länken som en katalog och avsöks rekursivt. (Observera att programmet inte kontrollerar om länken är "rekursiv". En katalog som innehåller en länk till samma katalog skulle orsaka en oändlig snurra, och efter en viss tid när stacken blir full eller minnet tar slut, kraschar programmet.) Normalvärdet är av.
Lista bara skillnader:	Bara objekt som inte är lika i alla indatakataloger listas, och bara ändrade filer syns. Därför kopieras inte filer som är lika i alla kataloger vid en sammanfogning och om målkatalogen inte innehåller filerna innan sammanfogningen, kan du senare sakna några filer. (Alternativet kommer troligen att ändras i en senare version.) Normalvärdet är av.
Filjämförelseläge:	
Binär jämförelse:	Det här är förvalt filjämförelseläge.
Fullständig analys:	Gör en fullständig analys av varje fil och visa kolumner med statistisk information. (Antal upplösta, oupplösta, inte blanka och blanka konflikter.) Den fullständiga analysen är långsammare än en enkel binäranalys, och är mycket långsammare för filer som inte innehåller text. (Ange lämpliga filmönster för att undvika dem.)
Lita på ändringsdatum:	Om du jämför stora kataloger via ett långsamt nätverk, kan det gå snabbare att bara jämföra ändringsdatum och fillängd. Men hastighetsförbättringen sker till priset av en liten osäkerhet. Använd alternativet med försiktighet. Normalvärdet är av.
Lita på storleken:	Liknar att lita på ändringsdatum. Ingen verklig jämförelse sker. Två filer anses vara lika om deras filstorlekar är lika. Detta är användbart när filkopieringsåtgärden inte bevarade ändringsdatum. Använd alternativet med försiktighet. Normalvärdet är av.
Synkronisera kataloger:	Aktiverar "synkroniseringsläge" när två kataloger jämförs och ingen explicit målkatalog anges. I det här läget väljes föreslagna åtgärder så att båda källkatalogerna är likadana efteråt. Sammanfogningsresultatet skrivs också till båda kataloger. Normalvärdet är av.
Kopiera nyare istället för att sammanfoga:	Istället för att sammanfoga kopierar den föreslagna åtgärden den nyare källan om ändringar har skett. (Anses vara osäkert, eftersom det betyder att man antar att den andra filen inte också har redigerats. Kontrollera för att vara säker i varje enskilt fall.) Normalvärdet är av.
Säkerhetskopiera filer:	Om en fil eller hel katalog ersätts med en annan eller tas bort, då ändras originalversionens namn med tillägg av filändelsen ".orig". Om en gammal säkerhetskopia med filändelsen ".orig" redan finns tas den bort utan säkerhetskopiering. Det här gäller också normal sammanfogning av enstaka filer, inte bara sammanfogningsläge för kataloger. Normalvärdet är på.

Andra funktioner i katalogsammanfogningsfönstret

Delat eller fullskärmsläge
Oftast förblir listfönstret för katalogsammanfogning synligt medan en enstaka fil jämförs eller sammanfogas. Du kan flytta raden som delar fillistan från fönstren för textjämförelse med musen. Om du inte vill göra det, kan du inaktivera "Delad skärmvy" i menyn "Katalog". Därefter kan du använda "Byt vy" i menyn "Katalog" för att byta mellan fillistan och fönstren för textjämförelse, som då upptar hela fönstret.

Jämföra och sammanfoga en ensam fil
Du föredrar troligen ett vanligt dubbelklick på musen för att jämföra en fil. Hur som helst finns det också ett alternativ i menyn "Katalog". Du kan också direkt sammanfoga en enstaka fil, utan att starta katalogsammanfogning via "Sammanfoga markerade filer" i menyn "Sammanfoga". När resultatet sparas, sätts status till klar, och filen sammanfogas inte igen om en katalogsammanfogning startas.
Men observera att statusinformationen går förlorad när du kör om en katalogavsökning: menyn "Katalog", "Avsök igen"

Jämföra eller sammanfoga filer med olika namn
Ibland behöver du jämföra eller sammanfoga filer med olika namn (t.ex. nuvarande fil och säkerhetskopian i samma katalog).
Markera den exakta filen genom att klicka på ikonen i kolumnen A, B eller C. Filen som först markeras på det sättet markeras med "A", den andra och tredje med "B" och "C" oberoende av vilken kolumn de finns i. Bara upp till tre filer kan markeras på detta sätt.
Fortsätt genom att välja "Jämför explicit markerade filer" eller "Sammanfoga explicit markerade filer" från menyn "Katalog". Av bekvämlighetsskäl finns också menyalternativen som en sammanhangsberoende meny som visas när du klickar på den senast markerade filen.
Jämförelsen eller sammanfogningen av en fil sker i samma fönster. Om metoden används för kataloger öppnas ett nytt fönster.