Comparazione e fusione di directory con KDiff3

Introduzione
Spesso i programmatori devono modificare molti file nelle directory per realizzare i loro scopi. Per questo KDiff3 permette anche di comparare e fondere intere directory ricorsivamente!
Anche se comparare e fondere le directory sembra abbastanza ovvio, ci sono molti dettagli che bisogna considerare. Il più importante è il fatto che ora molti file potrebbero essere coinvolti in ogni operazione. Se non hai creato copia di riserva dei dati originali, può essere molto difficile se non impossibile recuperare lo stato originale. Quindi prima di avviare una fusione assicurati che i tuoi dati siano sicuri e sia possibile un recupero. Se crei un archivio o usi un sistema di controllo versioni è una tua decisione, ma anche gli esperti programmatori ed integratori hanno bisogno dei vecchi sorgenti prima o poi. E nota che anche se io (autore di KDiff3) cerco di fare del mio meglio, non posso garantire che non ci siano errori. In accordo con la licenza GNU-GPL NON CI SONO GARANZIE alcuna per questo programma. Quindi attenzione e ricordate:
Errare è umano, ma per incasinare davvero tutto è necessario un computer.
Questo è quello che questo programma può fare per te: KDiff3 ...
... legge e compara due o tre directory ricorsivamente,
... fa particolare attenzione ai file simbolici,
... permette di selezionare i file con un doppio clic del mouse,
... per ogni elemento propone una operazione di fusione, che puoi cambiare prima di avviare la fusione delle directory,
... permette la simulazione della fusione e visualizza le azioni che dovrebbero essere fatte, senza eseguirle,
... permette di fondere, e permette l'intervento manuale quando questo è necessario,
... ti permette di avviare l'operazione selezionata per tutti gli elementi (tasto F7) o per l'elemento selezionato (tasto F6),
... permette di continuare la fusione dopo l'interazione manuale con il tasto F7,
... opzionalmente crea una copia di riserva, con l'estensione ".orig",
...

Avviare la comparazione o la fusione di directory
Questa operazione è molto simile alla comparazione e fusione di un file. È necessario specificare le directory nella riga di comando o nel dialogo di selezione file.

Compara/Fondi due directory:

kdiff3 dir1 dir2
   kdiff3 dir1 dir2 -o destdir

Se nessuna directory è stata specificata, KDiff3 utilizzerà dir2.

Compara/Fondi tre directory:

kdiff3 dir1 dir2 dir3
   kdiff3 dir1 dir2 dir3 -o destdir

Quando tre directory vengono fuse allora dir1 verrà utilizzata come base della fusione. Se nessuna directory di destinazione è stata specificata, KDiff3 utilizzerà dir3 come directory di destinazione per la fusione.
Si noti che solamente la comparazione inizia automaticamente, non la fusione. Per questo tu devi prima selezionare un elemento del menu o il tasto F7. (Ulteriori dettagli di seguito.)

Mostra informazioni
Durante la lettura delle directory un messaggio informativo appare per notificare lo stato di avanzamento. Se annulli l'operazione di scansione, solamente i file che sono stati comparati fino a quel momento saranno riportati.
Quando la scansione del directory è stata completata KDiff3 mostra una lista dei risultati della sinistra, ...
... ed i dettagli dell'elemento attualmente selezionato sulla destra:

Colonna del nome
Ogni file e directory trovato durante la scansione è mostrato qui in un albero. Puoi selezionare un elemento facendo clic con il mouse.
Normalmente le directory sono collassate. È possibile espanderle e collassarle con un clic su "+"/"-" o con un doppio clic sull'elemento o usando i tasti sinistra/destra. Il menu "Directory" contiene inoltre due azioni "Chiudi sottodirectory" e "Apri sottodirectory" con le quali puoi collassare o espandere tutte le directory in una sola volta.
Se fai doppio clic sopra un file allora la comparazione verrà avviata e apparirà la finestra di verifica file.
L'immagine nella colonna riflette il tipo di file nella prima directory ("A"). Può essere una di queste:
File normale
Directory normale (Immagine della directory)
Collegamento ad un file (Immagine del file con una freccia di collegamento)
Collegamento ad una directory (Immagine della directory con una freccia di collegamento)
Se il tipo di file è diverso nelle altre directory allora questo è visibile nelle colonne A/B/C e nella finestra che mostra i dettagli dell'elemento selezionato. Nota che in questo caso nessuna operazione di fusione potrà essere selezionata automaticamente. Quando la fusione partirà l'utente sarà informato di questo problema.

Le colonne A/B/C e lo schema dei colori
Come si può vedere, nell'immagine sopra, i colori rosso, verde, giallo e nero sono utilizzati nelle colonne A/B/C.
Nero: Questo elemento non esiste in questa directory.
Verde: Elemento più recente.
Giallo: Più vecchio del verde, più recente del rosso.
Rosso: Elemento più vecchio.
Ma per gli elementi che erano identici nella comparazione il loro colore è anche identico anche se l'età non lo è.
Le directory sono considerate uguali se tutti gli elementi contenuti sono identici. Essi avranno quindi lo stesso colore. Ma l'età di una directory non è considerata per il proprio colore.
L'idea di questo schema di colorazione l'ho avuta da dirdiff. I colori sembrano i colori di un foglio che è verde quando nuovo, diventa giallo successivamente e rosso quando è vecchio.

La colonna dell'operazione
Dopo la comparazione delle directory KDiff3 valuterà inoltre una proposta per l'operazione di fusione. Questo è visibile nella colonna "Operazione". È possibile modificare l'operazione facendo clic sopra l'operazione che desideri cambiare. Apparirà un piccolo menu che permetterà di selezionare una operazione per quel'elemento. (Puoi anche selezionare le operazioni necessarie tramite tastiera. Ctrl+1/2/3/4/Del seleziona rispettivamente, se disponibili, A/B/C/Fondi/Cancella.) Questa operazione potrà essere eseguita durante la fusione. Dipende dall'elemento e dalla modalità di fusione in cui ti trovi, quale operazione è disponibile. La modalità di fusione è una delle
Fusione di tre directory ("A" è considerato la base più vecchia di entrambe).
Fusione di due directory.
Modalità di sincronizzazione directory (attivabile con l'opzione "Sincronizza Directory").
Nella fusione di tre directory l'operazione proposta sarà: Se per un elemento ...
... le tre directory sono uguali: Copia da C
... A e C sono uguali ma B no: Copia da B (o se B non esiste, cancella, se esiste, la destinazione)
... A e B sono uguali ma C no: Copia da C (o se C non esiste, cancella, se esiste, la destinazione)
... B e C sono uguali ma A no: Copia da C (o se C non esiste, cancella, se esiste, la destinazione)
... esiste solo A: Eliminare la destinazione (se esiste)
... esiste solo B: Copia da B
... esiste solo C: Copia da C
... A,B e C non sono uguali: Fusione
... A, B e C non sono dello stesso tipo (es. A è una directory, B è un file): "Errore: Conflitto nel tipo di file". Fino a quando tali elementi esistono la fusione non può essere avviata.
Nella fusione di due directory l'operazione proposta sarà: Se per un elemento ...
... entrambe le directory sono uguali: Copia da B
... A esiste, ma non B: Copia da A
... B esiste, ma non A: Copia da B
... A e B esistono ma non sono uguali: Fusione
... A e B non sono dello stesso tipo (es. A è una directory, B è un file): "Errore: Conflitto nel tipo di file". Fino a quando tale elemento esiste la fusione delle directory non può essere avviata.
La modalità di sincronizzazione è attiva se solo due directory e nessuna destinazione è stata specificata e se l'opzione "Sincronizza directory" è attiva. KDiff3 selezionerà quindi una operazione predefinita così entrambe le directory, successivamente, sono uguali. Se per un elemento ...
... entrambe le directory sono uguali: Nulla da fare.
... A esiste, ma non B: Copia A su B
... B esiste, ma non A: Copia B su A
... A e B esistono, ma non sono uguali: Fondi e memorizza il risultato in entrambe le directory. (...)
... A e B non sono dello stesso tipo (es. A è una directory, B è un file): "Errore: Conflitto nel tipo di file". Fino a quando tale elemento esiste la fusione delle directory non può essere avviata.
Se due directory vengono fuse e l'opzione "Copia il più recente invece di fondere" è selezionata, KDiff3 verificherà le date e proporrà di scegliere il file più recente. Se i file non sono uguali ma hanno data uguale, il risultato dell'operazione sarà "Errore: Le date sono uguali ma i file no." Finché esistono file in questa situazione la fusione delle directory non potrà iniziare.

La colonna di stato
Durante la fusione i file saranno processati uno dopo l'altro. La colonna di stato mostrerà "Fatto" per gli elementi correttamente fusi, e altri messaggi se è accaduto qualcosa di inaspettato. Quando una fusione è completa, bisognerebbe fare un'ultima verifica per vedere se gli stati di tutti gli elementi concordano.

Avviare una fusione
Puoi inoltre fondere l'elemento attualmente selezionato (file o directory), o tutti gli elementi.Quando hai scelto tutte le tue operazioni (anche in tutte le sottodirectory) puoi far partire la fusione.
Attenzione che se non viene specificata una directory di destinazione esplicitamente, allora la destinazione sarà "C" nella modalità di tre directory, "B" nella modalità di due directory, e nella modalità di sincronizzazione sarà "A" e/o "B".
Se è stata specificata la directory di destinazione verificare anche che tutti gli elementi di output siano anche nell'albero. Ci sono alcune opzioni che causano l'omissione di certi elementi dalla comparazione e dalla fusione delle directory. Verifica queste opzioni per non avere delle brutte sorprese:
"Sottodirectory": Se disabilitato, gli elementi nelle sottodirectory non saranno esaminati.
"Categorie"/"Categorie escluse": Include/Esclude elementi dalla verifica
"Escludi file nascosti"
"Elenca solo le differenze": I file verificati in tutte le directory non appaiono nell'albero, così come anche della destinazione.
(Nell'attuale versione devi eseguire manualmente una riscansione tramite il menu "Directory"->"Riscandisci" solo dopo aver cambiato le opzioni che hanno effetto sulla directory scannata.)
Se così sei soddisfatto, il resto è facile.
Per fondere tutti gli elementi: Seleziona "Avvia/Continua la fuzione directory" nel menu "Directory" o premi il tasto F7 (la scorciatoia). Per fondere solamente l'elemento attualmente selezionato: Seleziona "Avvia oprazione per l'elemento corrente" o premi F6.
Se per un conflitto nel tipo di file, persiste la non validità dell'operazione scelta per alcuni file, allora apparirà un messaggio che indica elementi, in modo che tu possa selezionare un'operazione valida per essi.
Se fondi tutti gli elementi allora apparirà un dialogo, proponendoti le opzioni "Fallo", "Simula" e "Annulla".
Seleziona "Simula" se vuoi vedere cosa dovrebbe essere fatto senza effettivamente farlo. Una lista dettagliata di tutte le operazioni sarà mostrata.
Altrimenti seleziona "Esegui" per avviare l'effettiva fusione.
Quindi KDiff3 avvierà l'operazione specifica per tutti gli elementi. Se è richiesta una interazione manuale (fusione di un singolo file), sarà aperta la finestra di fusione (guarda la schermata grande).
Quando hai finito con il file, seleziona nuovamente "Avvia/Continua la fusione di directory" o il tasto F7. Se non hai ancora salvato, un dialogo chiederà di farlo. KDiff3 continuerà quindi con il prossimo elemento.
Quando KDiff3 incontra un errore, avvertirà di questo e mostrerà un dettagliato stato informativo. Sul fondo di questa lista ci saranno alcuni messaggi di errore i quali dovrebbero aiutare a capire la causa del problema. Quando continui con la fusione (tasto F7) KDiff3 ti chiederà o di riprovare o di trascurare l'elemento che ha causato il problema.Ciò significa che prima di continuare puoi scegliere un'altra operazione o risolvere il problema attraverso altri mezzi.
Quando la fusione è completa, KDiff3 informerà quindi tramite un dialogo con messaggio.
Se alcuni elementi sono stati fusi individualmente allora KDiff3 ne terrà conto (mentre la corrente sessione di fusione avanza) e non li fonderà nuovamente fino a quando la fusione per tutti gli altri elementi non sarà eseguita. Anche quando la fusione viene saltata o non è stato salvato nulla questi elementi sono consederato completati. Solo quando cambi le operazioni di fusione l'elemento sarà nuovamente fuso.

Opzioni per comparare e fondere directory
Le preferenze di KDiff3 (menu"Impostazioni"->"Configura KDiff3") ora ha una sezione chiamata "Fusione directory" con queste opzioni:
Sottodirectory:	Seleziona se ricercare le directory ricorsivamente.
Tipi di file:	Solo i file che corrispondono al tipo saranno messi nell'albero. Più di un tipo può essere specificato utilizzando il punto e virgona ";" come separatore. Wildcards possibile: '*' e '?'. (Es. "*.cpp;*.h"). Predefinito è "*". Le directory non hanno bisogni di tali tipi.
File da escludere:	I file e le sottodirectory che corrispondono a questo tipo saranno esclusi dall'albero. Più di uno schema potrebbe essere specificato utilizzando il punto e virgola ";" come separatore. Wildcards validi: '*' e '?'. Il predefinito è "*.orig;*.o".
Utilizza CVS-Ignore:	Ignora i file e le directory dovrebbero essere ignorate anche dal CVS. Molti file generati automaticamente sono ignorati dal CVS. Il grosso vantaggio è che questo può essere una directory specificata dal file locale ".cvsignore". (Vedi info:/cvs/cvsignore.)
Esamina file e directory nascosti:	Su alcuni filesystem esiste l'attributo "Nascosto". Su altri sistemi il nome del file inizia con il punto "." che significa nascosto. Questa opzione permette di decidere se includere questi file nell'albero oppure no. Normalmente attivo.
Segui i link dei file:	Per collegamenti a file: Quando disabilitato, il collegamenti simbolici verranno comparati. Quando abilitati, quindi i file collegati saranno comparati. Normalmente disabilitato.
Segui i link delle directory:	Per collegamenti a directory: Quando disabilitato, i collegamenti simbolici saranno comparati. Quando attivo i collegamenti saranno trattati come una directory e saranno scannate ricorsivamente. (Notare che il programma non verifica se il collegamento è "ricorsivo". Quando per esempio una che contiene un collegamento ad una directory dovrebbe causare un ciclo infinito, e dopo un po' di tempo ciò causerebbe un riempimento dello stack o l'utilizzo di tutta la memoria, causando il blocco del programma.) Normalmente disabilitato.
Elenca solo le differenze:	Solo gli elementi che non sono uguali in tutte le directory di ingresso saranno elencate e solo e file cambiati sono visibili. Quindi i file che sono uguali in tutte le directory non dovrebbero essere copiati durante una fusione e se la directory di destinazione non contiene il file prima della fusione, potresti perdere alcuni file successivamente. (Questa opzione è probabilmente diversa nelle future versioni.) Normalmente disattiva.
Basati sulla data di modifica:	Se si comparano directory lunghe in una rete lenta, potrebbe essere più veloce comparare solamente le date di modifica e la dimensione del file. Ma questo aumento di velocità ha il prezzo di una piccola incertezza. Usare questa opzione con cura. Normalmente disattiva.
Basati sulla dimensione:	Simile a considerare la data di modifica. Non avviene una reale comparazione. Due file sono considerati uguali se la loro dimensione risulta uguale. Questo è utile quando l'operazione di copia file non ha mantenuto la data di modifica. Usa questa opzione con cautela. Normalmente disabilitata.
Sincronizza le directory:	Attiva la modalità "Sincronizza" quanto vengono comparate due directory e non è stata indicata la directory di destinazione. In questa modalità le operazioni proposte saranno scelte in modo che entrambe le directory sorgenti sono uguali successivamente. Anche il risultato di fusione sarà scritto in entrambe le directory. Normalmente disabilitato.
Copia il più recente invece di fondere:	Invece di fondere l'operazione proposta copierà il sorgente più recente se appena cambiato. (Considerato pericoloso, perché ciò implica la conoscenza, che gli altri file non siano stati ancora modificati. Verifica in ogni caso per essere sicuro.) Normalmente disattivata.
File di backup:	Se un file o una intera directory è sostituita con un'altra o è cancellata la versione originale sarà rinominata con l'estensione ".orig". Se una vecchia copia con estensione ".orig" esiste già allora questa sarà eliminata senza copia. Questo inoltre interessa la normale fusione di singoli file, non solo nella fusione di directory. Normalmente attivo.

Altre funzioni

Schermo intero/diviso
Normalmente la lista di visualizzazione della fusione delle directory rimane visibile fino il file è comparato e fuso. Con il mouse puoi muovere la barra di divisione che separa la lista dei file dalla finestra di verifica. Se non vuoi questo puoi disabilitare l'opzione "Mostra lo schermo diviso" nel menu "Directory". Sarà quindi possibile usare "Inverti vista" nel menu "Directory" per invertire tra la lista di file e la visualizzazione delle differenze che quindi occuperà tutto lo schermo.

Comparare o fondere un singolo file
Probabilmente preferiresti un semplice doppio clic del mouse sul file in questione per compararlo. Tuttavia esiste anche una voce nel menu "Directory". È possibile anche fondere direttamente un singolo file, senza avviare l'operazione di fusione directory tramite "Fondi singolo file" nel menu "Directory". Successivamente al salvataggio lo stato sarà impostato a fatto e il file non sarà nuovamente fuso se una fusione di directory è avviata.
Ma notare che queste informazioni di stato saranno perse quando si ritorna alla directory scandita: menu "Directory": "Riscandire"