# Manuale di &kdiff3;

## Introduzione

### Un'altra interfaccia per confrontare file?

Per la comparazione dei file esistono numerosi strumenti grafici. Perché dovresti scegliere KDiff3? Lascia che ti spieghi perché l'ho scritto.

KDiff3 è nato perché dovevo eseguire una difficile fusione tra file. La fusione è necessaria quando molte persone, in un progetto, lavorano sugli stessi file. La fusione può essere piuttosto automatica, quando gli strumenti di fusione non solo permettono la modifica dei nuovi file ("rami") ma anche del file originale ("base"). Lo strumento per la fusione sceglierà automaticamente solo le modifiche eseguite all'interno di un ramo. Quando più persone cambiano le stesse righe, allora lo strumento di fusione trova un conflitto che dovrà essere risolto manualmente.

In quel caso la fusione era difficile in quanto uno aveva cambiato molte cose e corretto l'indentazione in molti punti. Inoltre, un altro aveva variato molto testo in alcuni file, dando luogo a molti conflitti durante l'operazione di fusione.

Lo strumento che utilizzai mostrava solamente le righe variate, ma non cosa era cambiato all'interno di esse. Inoltre non c'era nessuna informazione riguardo la variazione di indentazione. La fusione era un piccolo incubo.

Così fu l'inizio. La prima versione poteva mostrare le differenze all'interno di una riga e la differenza degli spazi bianchi. Successivamente molte altre caratteristiche furono introdotte per aumentarne l'utilità.

Per esempio, se vuoi comparare velocemente alcuni testi, è possibile copiarne il contenuto negli appunti e quindi incollarlo in una finestra di KDiff3.

Una caratteristica che ha richiesto un grosso sforzo è stata la comparazione tra directory e la funzione di fusione, le quali hanno trasformato il programma in un vero e proprio navigatore di file.

Spero che KDiff3 sia utile anche a te. Divertiti!

Joachim Eibl (2003)

### Schermate e caratteristiche

Questa schermata mostra la differenza tra due file di testo

(Usando una versione recente di KDiff3):

È supportata la fusione di tre file. Questa è particolarmente utile se due persone variano indipendentemente il codice. Il file originale (il file base) è utilizzato per aiutare KDiff3 a selezionare automaticamente i cambiamenti da salvare. Sotto le finestre che evidenziano le differenze una finestra di modifica ti permetterà di risolvere i conflitti riscontrati, mostrandone il risultato ottenuto. Potrai inoltre modificare il risultato delle operazioni. Questa schermata mostra il risultato della fusione di tre file in ingresso:

KDiff3 aiuta anche a comparare e fondere intere directory. Questa schermata mostra KDiff3 durante una fusione di directory:

### Altre caratteristiche

#### Indicazione delle differenze per riga e per carattere

Sfruttando le possibilità dei monitor grafici a colori, KDiff3 evidenzia accuratamente quali sono le differenze. Quando avrai la necessità di fare molte revisioni di codice, apprezzerai questo aiuto.

#### Vedere le differenze di spazi bianchi a colpo d'occhio

Saranno visibili spazi e tabulatori che risultano diversi. Quando le righe differiscono solamente di uno spazio bianco questo potrà essere subito visibile nella colonna di sommario posizionata sul lato sinistro. Non dovrai più preoccuparti quando qualcuno cambia l'indentazione!

#### Confronto tra tre file

Analizza tre file e verifica dove differiscono.

Le finestre sinistra/centrale/destra si chiamano A/B/C ed hanno rispettivamente il colore /blu/verde/magenta.

Se per una riga due file sono uguali ed un altro è diverso, il colore mostrerà quello diverso. Il colore rosso significa che tutti i file sono diversi.

#### Comoda fusione di due o tre file di input

KDiff3 può essere usato per fondere due o tre file di ingresso ed automaticamente fonde quanto è possibile. Il risultato è presentato in una finestra di modifica dove molti conflitti possono essere risolti con un semplice clic del mouse: Selezionando i pulsanti A/B/C dalla barra si seleziona la sorgente che deve essere utilizzata. È possibile selezionare più di un file sorgente. Dato che questa finestra è un editor anche i conflitti che hanno bisogno di ulteriori correzioni possono essere qui risolti senza bisogno di un altro strumento.

#### Inoltre ...

- Pulsanti per la navigazione veloce.

- Un clic del mouse nella colonna di sommario sincronizzerà tutte le finestre per mostrare la stessa posizione.

- Seleziona e copia da una qualsiasi finestra ed incolla nella finestra del risultato della fusione.

- Colonna riassuntiva, che mostra dove sono i cambiamenti ed i conflitti.

- È possibile modificare i colori secondo le tue preferenze personali.

- Dimensione della tabulazione modificabile.

- Opzione per inserire spazi invece che tabulatori.

- È possibile aprire i file comodamente dalla finestra di dialogo oppure specificandoli sulla riga di comando.

- Ricerca stringhe in tutto il testo della finestra. Trova (Ctrl-F) e Trova Successivo (F3)

- Mostra il numero di riga per ogni riga.

- Incolla dagli appunti o trascina il testo nella finestra di KDiff3.

- Trasparenza di rete tramite TDEIO.

- Può essere utilizzato come visualizzatore delle differenze in Kdevelop 3.

- Accapo per righe lunghe.

- Supporto per l'Unicode, UTF-8 e altri codec.

- Supporto per le lingue scritte da destra a sinistra.

- ...

## Confronto e fusione tra file

### Opzioni della riga di comando

#### Confronta 2 file:

    kdiff3 file1 file2

#### Fondi 2 file:

    kdiff3 file1 file2 -m
       kdiff3 file1 file2 -o outputfile

#### Confronta 3 file:

    kdiff3 file1 file2 file3

#### Fondi 3 file:

    kdiff3 file1 file2 file3 -m
       kdiff3 file1 file2 file3 -o outputfile

Da notare che `file1` potrebbe essere trattato come base di `file2` e `file3`.

#### Caso particolare: File con lo stesso nome

Se tutti i file hanno lo stesso nome ma si trovano in directory diverse, è possibile specificare solamente il nome del primo file. Es.:

    kdiff3 dir1/filename dir2 dir3

#### Riga di comando per avviare il confronto e la fusione tra directory:

Non cambia molto, ma ora lavoriamo su delle directory.

    kdiff3 dir1 dir2
       kdiff3 dir1 dir2 -o destdir
       kdiff3 dir1 dir2 dir3
       kdiff3 dir1 dir2 dir3 -o destdir

Per maggiori informazioni su confronto e fusione tra directory leggi qui.

#### Per maggiori informazioni sulle opzioni della riga di comando usa:

    kdiff3 --help
    Opzioni:
      -m, --merge               Fondi l'input.
      -b, --base file           Fissa il file di base. Per compatibilità con alcuni programmi.
      -o, --output file           File di output. Implica -m. Es.: -o nuovofile.txt
      --out file              File di output (Per compatibilità con alcuni programmi).
      --auto                    Senza GUI se tutti i conflitti possono essere risolti automaticamente (richiede -o file)
      --qall                    Non risolve i conflitti automaticamente. (Per compatibilità...)
      --L1 alias1               Sostituzione del nome visibile per file input 1 (base).
      --L2 alias2               Sostituzione del nome visibile per file input 2.
      --L3 alias3               Sostituzione del nome visibile per file input 3.
      -L, --fname alias         Sostituzione del nome visibile alternativo. Da specificare per ogni input.
      -u                        Non ha effetti. Per compatibilità con alcuni programmi.

### Dialogo di apertura file

Poiché devono essere selezionati molti file, il programma ha un particolare dialogo di apertura file:

Il dialogo di apertura file permette di digitare il nome del file, di selezionare un file con il navigatore ("File...") o di scegliere i file più recenti da una lista a comparsa. Quando aprirai nuovamente il dialogo di selezione dei file vi troverai i nomi dei file in uso. Il nome del terzo file non è richiesto. Se il campo per "C" rimane vuoto, le operazioni di confronto riguarderanno solo due file.

Puoi anche selezionare una directory con "Directory...". Se per A è specificata una directory allora sarà automaticamente attivata la comparazione/fusione di directory. Se A specifica un file ma B e C o l'output specifica una directory, allora KDiff3 utilizza il nome del file di A nella directory specificata.

Se viene selezionato "Fusione", allora l'opzione "Output" diverrà modificabile. Ma non è richiesto di specificare subito il nome del file in uscita. Potrai specificarlo successivamente.

L'opzione "Configura..." apre un menu di opzioni, in modo che tu possa impostare le varie opzioni prima di avviare l'analisi.

### Incolla e trascina l'input

Molte volte vuoi comparare parti di testo che non sono un file. KDiff3 permette anche di incollare testo dagli appunti nella finestra di verifica delle differenze selezionata. L'analisi delle differenze apparirà immediatamente. Nel dialogo di selezione file non avrai la necessità di specificare i file, potrai semplicemente chiudere con l'opzione "Annulla".

È possibile utilizzare il trascinamento: prendi un file dal file manager o seleziona un testo da un editor e trascinalo dentro una finestra di verifica.

Qual è l'idea? Alcune volte un file contiene due funzioni simili, ma per controllarne il grado di similitudine sarebbe dispendioso se tu dovessi prima creare due file e quindi ricaricarli. Ora puoi semplicemente copiare, incollare e comparare la sola parte di interesse.

Nota: Attualmente non è possibile trascinare qualsiasi cosa all'interno di KDiff3. Puoi solo portare qualcosa nella finestra di verifica delle differenze.

Attenzione: Alcuni editor interpretano il trascinamento in altri programmi come operazioni di taglia (invece che copia) ed incolla. In tal caso i dati originali andrebbero quindi persi.

### Capire le informazioni della finestra di ingresso

Sopra ad ogni finestra di testo c'è una "riga informativa". Queste righe contengono una lettera "A", "B" o "C", il nome del file ed il numero della prima riga visibile nella finestra. (Nota che "C" è opzionale). Ogni riga informativa appare con colori diversi. (Se i percorsi sono troppo lunghi, è possibile muovere il mouse sulla riga informativa e un suggerimento visualizzerà l'intero nome).

Alle tre finestre di input sono assegnate le lettere "A", "B" e "C". "A" è colorata di blu, "B" di verde e "C" di rosso. Questi sono i colori predefiniti, ma puoi cambiarli dal menu delle impostazioni.

Quando si trova una differenza allora il colore mostra quale file di ingresso differisce. Quando entrambi gli altri file di input differiscono il colore utilizzato per evidenziare questo sarà il rosso ("Colore di conflitto" nelle impostazioni). Questo schema di colori è molto utile nel caso di tre file di ingresso, che discuteremo nella prossima sezione (Fusione).

A sinistra di ogni testo è posizionata la "colonna di sommario". Se ci sono differenze su una riga, la colonna di sommario mostrerà il colore corrispondente. Nel sommario le differenze di soli spazi bianchi saranno evidenziate con una griglia. Per i linguaggi di programmazione in cui non è importante la posizione degli spazi bianchi è molto utile notare a colpo d'occhio se qualcosa di importante è stato variato. (In C/C++ lo spazio bianco è importante solamente all'interno delle stringhe, commenti, istruzioni per il preprocessore e solo in altre situazioni molto particolari).

La linea verticale che separa la colonna di sommario ed il testo è interrotta se il file di input non presenta righe in questo punto. Quando è attivato il ritorno a capo questa linea verticale apparirà punteggiata in corrispondenza delle righe che vanno a capo.

Sul lato destro, a sinistra della barra di scorrimento, è presente una colonna informativa. Essa mostra sinteticamente la colonna di sommario dell'ingresso "A". Differenze e conflitti sono visibili a colpo d'occhio. Quando vengono utilizzate solo due finestre di input, tutte le differenze appaiono in rosso, in quanto ogni differenza è un conflitto. Un rettangolo nero incornicia la parte visibile dell'input. Per file di ingresso molto lunghi, quando il numero delle righe è maggiore dell'altezza, in pixel, della colonna di sommario, molte righe di ingresso condividono un'unica riga di sommario. Un conflitto qui ha priorità sulle semplici differenze, che hanno priorità sui "non-cambiamenti". In tal modo così nessuna differenza o conflitto viene perso. Con un clic sopra questa colonna di sommario, il testo corrispondente verrà visualizzato.

### Operazione di fusione e la finestra di modifica del risultato

Anche la finestra di modifica del risultato della fusione (sotto la finestra di ingresso) ha una riga informativa sovrastante che mostra "Output:", il nome del file e "[Modificato]" se qualcosa è stato variato. Normalmente essa contiene del testo creato dagli automatismi della fusione, ma spesso conterrà anche dei conflitti.

!!! Il salvataggio è disabilitato fino a quando tutti i conflitti non sono risolti !!! (Usa l'opzione "Vai al precedente/prossimo conflitto non risolto" per ricercare i conflitti rimanenti).

Se i file di ingresso sono solodue, ogni differenza è un conflitto che deve essere risolto manualmente.

Con tre file di input il primo è considerato come base, mentre il secondo ed il terzo contengono le modifiche. Quando in qualche riga solo il file B o il file C presenta una differenza, ma non entrambi, allora il file modificato sarà automaticamente selezionato. Solo quando B e C hanno delle differenze sulle stesse righe il programma si accorgerà del conflitto il quale dovrà essere risolto manualmente. Quando B e C coincidono, ma differiscono con A, allora sarà selezionato C.

La finestra di modifica del risultato di fusione ha anche una colonna di sommario sulla sinistra. Essa mostra la lettera dell'input da dove la riga è stata selezionata o nulla se tutte le tre sorgenti hanno la stessa riga. Per i conflitti essa mostra un punto interrogativo "?" e la riga mostra "<Conflitto nel fondere>", tutto in rosso. Dato che risolvere conflitti riga per riga richiede molto tempo, le righe sono raggruppate per gruppi con le stesse caratteristiche di differenza e conflitto. Saranno separati solo i conflitti di spazi bianchi dai conflitti di spazi non bianchi in modo da facilitare la fusione dei file in cui l'indentazione, su molte righe, cambia.

Quando si fa clic sulla colonna di sommario con il tasto sinistro del mouse in una finestra, il gruppo appartenente a quella riga sarà selezionato in tutte le finestre e la parte iniziare del gruppo sarà visualizzata. (Questo potrebbe coinvolgere un posizionamento automatico nella finestra se l'inizio del gruppo non è visibile). Questo gruppo diverrà quindi il "gruppo corrente". Esso è visualizzato con il "Colore di fondo per questo intervallo corrente" e una barra nera apparirà sul lato sinistro del testo.

I pulsanti di selezione dell'ingresso contengono le lettere "A", "B" e "C" nella barra dei pulsanti sotto la barra dei menu. Quando si fa un clic su un pulsante di selezione dell'ingresso, le righe di questo input saranno aggiunte alla fine del gruppo selezionato se questo gruppo non conteneva già tale testo. Altrimenti le righe di questo file di ingresso saranno rimosse.

Inoltre puoi modificare direttamente qualsiasi riga. La colonna di sommario mostrerà "m" su ogni riga che hai modificato.

Alcune volte, quando una riga viene rimossa dalla fusione automatica o da una modifica manuale, e non rimangono altre righe nel gruppo, allora apparirà in questa riga il messaggio <Riga origine mancante>. Questa posizione verrà mantenuta dal gruppo nel caso tu cambiassi idea e volessi sezionare qualche altro sorgente. Questo testo non verrà reimmesso nel file salvato o in altre selezioni che desideri copiare ed incollare.

Il testo "<Fondi conflitti>" apparirà negli appunti se copi ed incolli del testo contenente questa riga. Fai comunque attenzione nell'eseguire tale operazione.

La normale fusione partirà per la risoluzione automatica di semplici conflitti. Ma il menu "Fondi" permette alcune azioni per altre comuni necessità. Se devi selezionare lo stesso sorgente per molti conflitti, potrai selezionare sempre "A", "B" o "C", o solamente per i conflitti non risolti restanti, o per i conflitti di spazi bianchi non risolti. Se vuoi decidere tu stesso ogni singola differenza "Considera le differenze come conflitti". O se vuoi ritornare all'opzione automatica di KDiff3 seleziona "Risolvi automaticamente i conflitti semplici". KDiff3 riavvierà quindi la fusione. Per azioni che cambiano le tue precedenti modifiche KDiff3 ti chiederà la conferma prima di procedere.

Nota: Quando scegliendo un sorgente per conflitti non risolti di spazi bianchi e le opzioni "Ignora numeri" o "Ignora commenti C/C++" sono utilizzate allora variazioni nei numeri o nei commenti saranno anch'essi trattati come spazi bianchi.

### Navigazione e modifica

È possibile navigare con le barre di scorrimento, con il mouse oppure con l'uso dei tasti. Se fai clic dentro una finestra potrai usare i pulsanti del cursore sinistra, destra, alto, basso, pagina successiva, pagina precedente, inizio, fine, ctrl-inizio, ctrl-fine come per gli altri programmi. La colonna descrittiva dopo la barra di scorrimento verticale del file di ingresso può anche essere utilizzata per la navigazione facendo clic su questa.

È possibile utilizzare la rotellina del mouse solo per scorrere su e giù.

Per modificare il risultato della fusione di file puoi utilizzare solamente i tasti di modifica. Puoi invertire la modalità di inserimento e sovrascrittura con il tasto insert. (la modalità di inserimento è quella predefinita).

Premendo il pulsante sinistro del mouse dentro una colonna di sommario saranno aggiornate tutte le finestre, che mostreranno l'inizio dello stesso gruppo di righe (come spiegato nella sezione "Fusione").

La barra dei pulsanti contiene inoltre altri pulsanti di navigazione con i quali è possibile saltare alla corrente/prima/ultima differenza, alla prossima/precedente differenza (ctrl-giù/ctrl-su), al prossimo/precedente conflitto (ctrl-pgdown/ctrl-pgup), o al prossimo/precedente conflitto non risolto. Nota che per KDiff3 un "conflitto" che non è stato automaticamente risolto all'inizio della fusione permane "conflitto"anche se risolto. Quindi la necessità di distinguere "conflitti non risolti".

C'è anche un pulsante "Vai automaticamente al prossimo conflitto non risolto dopo aver selezionato la fonte" (Avanzamento automatico). Selezionandolo quando un sorgente è selezionato, KDiff3 salterà automaticamente alla selezione del prossimo conflitto non risolto. Questo può aiutare quando scegli solamente un unico file di ingresso. Quando hai bisogno di entrambi i sorgenti, o vuoi modificare dopo la selezione, vorrai probabilmente disattivarlo. Prima di procedere al prossimo conflitto non risolto KDiff3 mostrerà l'effetto della tua scelta per un breve periodo. Questo tempo è modificabile nell'impostazione di Verifica & Fusione: È possibile specificare la "Pausa nell'avanzamento automatico" in millisecondi tra 0 e 2000. Suggerimento: Stanco di troppi Clic? - Quando ci sono molti conflitti usa un tempo basso di avanzamento automatico e le scorciatoie Ctrl-1/2/3 per selezionare A/B/C.

### Selezione, Copia ed Incolla

La finestre dell'ingresso non mostra un cursore, così le selezioni devono essere fatte con il mouse, fai clic con il tasto sinistro all'inizio, e, mantenendolo premuto, muoversi fino a fine selezione, dove dovrai rilasciare il tasto. Con un doppio clic è possibile selezionare una unica parola. Nella finestra del risultato è possibile selezionare anche tramite la tastiera, mantenendo il tasto "shift" e muovendosi con i tasti del cursore.

Per copiare negli appunti è necessario premere il pulsante "Copia" (Ctrl-C o Ctrl-Ins). Ma esiste anche l'opzione "Copia automatica". Se attiva, ogni volta che si seleziona del testo esso verrà copiato immediatamente e non dovrai esplicitarlo. Presta però attenzione all'utilizzo perché i contenuti degli appunti potrebbero accidentalmente essere distrutti.

"Taglia" (Ctrl-X o Shift-Delete) copia il testo selezionato negli appunti e lo elimina, mentre "Incolla" (Ctrl-V o Shift-Insert) inserisce il testo contenuto negli appunti nella posizione corrente o in sostituzione all'attuale selezione.

### Salvataggio

Il salvataggio sarà permesso solamente quando tutti i conflitti saranno risolti. Se il file esiste e l'opzione "File di copia" è abilitata allora il file esistente sarà rinominato con estensione ".orig", ma se tale file esiste sarà rimosso. All'uscita o all'avvio di un'altra analisi delle differenze se il risultato non è stato ancora salvato KDiff3 richiederà se si vuole salvare, annullare o procedere senza salvare. (KDiff3 non intercetta nessun segnale. Quindi se si esegue un "kill" di KDiff3 tutti i dati saranno persi).

I terminatori di riga sono salvati secondo il metodo tradizionale del sistema operativo. Per i sistemi Unix la riga termina con il solo carattere "\n", mentre per i sistemi Win32 ogni riga termina con i caratteri ritorno a capo + nuova riga "\r\n". KDiff3 non mantiene il terminatore originale del file, quindi non utilizzare KDiff3 con i file binari.

### Ricerca Stringhe

È possibile ricercare una stringa in ogni finestra di KDiff3. Il comando "Ricerca ..." (Ctrl-F) nel menu di Modifica apre un dialogo che permette di specificare la stringa da ricercare. È anche possibile selezionare la finestra sulla quale fare la ricerca. La ricerca partirà sempre dall'inizio. Usare il comando "Ricerca successivo" (F3) per la prossima occorrenza. Se decidi di cercare su più finestre allora la ricerca sarà dall'alto al basso nella prima finestra, poi dall'alto al basso nella seconda, ecc.

### Opzioni

Le opzioni e la lista del file recenti saranno memorizzate all'uscita del programma, e ricaricate quando verrà avviato. (Menu Impostazioni->Configura KDiff3 ...)

#### Tipo di caratteri

Seleziona un tipo carattere a larghezza fissa. (in alcuni sistemi questo dialogo potrebbe presentare anche la selezione della larghezza del font, ma non è consigliabile usarla).

Corsivo per le differenze:

- Selezionando questo, le differenze di testo saranno rappresentate con il tipo di carattere scelto ma in stile corsivo. Se il tipo di carattere non supporta il corsivo l'opzione non avrà effetto.

#### Colori

Colore primo piano:

- Normalmente nero.

Colore di fondo:

- Normalmente bianco.

Colore di fondo per le differenze:

- Normalmente grigio chiaro.

Colore A:

- Normalmente blu scuro.

Colore B:

- Normalmente verde scuro.

Colore C:

- Normalmente magenta scuro.

Colore per i conflitti:

- Normalmente rosso.

Colore di sfondo per questo intervallo corrente:

- Normalmente giallo chiaro.

Colore di sfondo per questo intervallo:

- Normalmente giallo scuro.

Su sistemi con soli 16 o 256 colori alcuni colori non sono disponibile nella forma originale. In tali sistemi l'opzione "Predefiniti" selezionerà un colore puro.

#### Impostazioni dell'editor

I Tab inseriscono spazi:

- Se questo è disabilitato e viene premuto il tasto di tabulazione, un carattere tabulatore verrà inserito, altrimenti verranno inseriti un numero appropriato di caratteri.

Dimensione di Tab:

- Può essere modificato per le tue necessità. Il predefinito è 8.

Rientro automatico:

- Quando premi Invio o Return verrà utilizzata, per la nuova riga, l'indentazione della riga precedente.

Copia automaticamente la selezione:

- Ogni selezione è immediatamente copiata negli appunti quando attiva e non sarà necessario esplicitare la copia.

Tipo di fine riga:

- Quando salvi un file puoi decidere il modo con cui vengono terminate le righe. La modalità preimpostata è quella abituale del sistema operativo in uso.

Usa la codifica locale:

- Per la visualizzazione di caratteri non ASCII. Puoi provare a cambiarla se alcuni caratteri della tua lingua non vengono visualizzati correttamente.

#### Impostazioni di verifica & fusione

Quando si comparano dei file, KDiff3 prima proverà a confrontare le righe che sono uguali in tutti i file di ingresso. Solo durante questa fase potrebbe ignorare gli spazi bianchi. La seconda fase confronta ogni riga. In tale fase gli spazi bianchi non saranno ignorati. Inoltre durante la fusione gli spazi bianchi non saranno ignorati.

Mantieni il ritorno a capo (CR):

- Alcuni editor (in alcuni sistemi) salvano il ritorno a capo '\r' e avanzamento riga '\n' mentre altri salvano solamente il ritorno a capo '\n'. Normalmente KDiff3 ignora il ritorno a capo, ma quando i file non hanno la stessa dimensione potrebbero comunque risultare uguali dopo una verifica parallela. Quando l'opzione è abilitata allora il ritorno a capo è reso visibile ma trattato come uno spazio bianco. Questa opzione deve essere disattivata durante la fusione. Normalmente disabilitata.

Ignora i numeri:

- Normalmente disabilitato. I caratteri numerici ('0'-'9','.','-') saranno ignorati nella prima parte dell'analisi nella quale viene fatta la verifica delle righe. Nel risultato delle differenze saranno tuttavia mostrate, ma sono trattate come spazi bianchi.

Ignora commenti C/C++:

- Normalmente disabilitato. Le variazioni nei commenti saranno trattati come variazioni degli spazi bianchi.

Ignora maiuscole:

- Normalmente disabilitato. I caratteri che differiscono solo per essere maiuscoli o minuscoli (come "A" e "a") saranno trattati come le variazioni nel numero di spazi bianchi.

Comandi del preprocessore

- Vedi la prossima sezione.

Comando del preprocessore per confrontare righe:

- Vedi la prossima sezione.

Ricerca approfondita:

- Ricerca approfondita per ricercare la più piccola differenza (Normalmente attiva). Questo sarà probabilmente utile per file complicati e lunghi. E lento per file molto lunghi.

Pausa nell'avanzamento automatico (ms):

- Quando l'opzione di auto avanzamento automatico è attiva si specifica quando lungo mostrare il risultato delle selezione prima di saltare al prossimo conflitto non risolto.

Trattamento predefinito degli spazi bianchi nel fondere 2 file:

- Automaticamente risolve tutti i conflitti di spazi bianchi scegliendo lo specifico file (Scelta manuale predefinita). Utile se lo spazio bianco non è importante in molti file. Se hai bisogno di questo solo occasionalmente è meglio usare "Scegli A/B/C per tutti i conflitti non risolti di spazio bianco" nel menu di fusione. Nota che se hai abilitato l'opzione "Ignora numeri" o "Ignora commenti C/C++" allora questa auto selezione verrà applicata anche per i conflitti nei numeri o nei commenti.

#### Fusione di directory

Queste opzioni sono considerate con la scansione delle directory e la manipolazione della fusione: Vedi Directory Comparazione/Fusione Documentazione per maggiori dettagli.

Tuttavia qui esiste una opzione che è anche rilevante per il salvataggio di singoli file:

File di backup:

- Quando viene salvato un file ed esiste una versione meno recente, la versione originale sarà rinominata con l'estensione ".orig". Se già esiste una versione con estensione ".orig" questa verrà eliminata senza una copia di riserva.

#### Opzioni locali e per la lingua

Lingua:

- Cambia la lingua usata per l'interfaccia utente. Le modifiche a questa opzione non hanno effetto immediato sul programma. Devi chiudere Kdiff3 e riavviarlo affinché la lingua venga cambiata. Questa opzione non è disponibile nella versione KDE di KDiff3 perché la lingua viene cambiata tramite le impostazioni globali di KDE.

Usa la stessa codifica per tutto:

- Le opzioni di codifica che seguono possono essere fissate separatamente per ogni voce o, se questa opzione è attivata, il primo valore vale per tutti.

Codifica locale:

- Davanti al selettore di codec appare una nota che ti dice quale è la codifica locale. Non è modificabile, serve solo a ricordarti quale è la codifica locale nel caso che tu non lo sapessi già. tuttavia devi selezionarla.

Codifica per i file A/B/C:

- Cambia la codifica dei file in ingresso. Ha effetto sulla visualizzazione dei caratteri speciali. Poiché puoi aggiustare separatamente le codifiche, potrai confrontare e fondere file prodotti con codifiche diverse.

Codifica per i file fusione e salvataggio:

- Quando avrai modificato un file, potrai scegliere con quale codifica salvarlo sul disco fisso.

Codifica per i file sottoposti al preprocessore:

- Quando definisci un preprocessore questo deve essere in grado di operare sulla codifica in uso. Ad esempio i tuoi file sono 16-bit-unicode e il tuo preprocessore può operare solo su file 8-bit-ascii. Con questa opzione puoi definire la codifica del risultato del preprocessore.

Lingue scritte da destra a sinistra:

- Alcune lingue sono scritte sa destra a sinistra. Quando questa opzione è attivata KDiff3 scrive i testi da destra a sinistra nelle finestre per il confronto e per la fusione. Nota che se avvii KDiff3 da riga di comando con l'opzione "--reverse", anche tutta l'interfaccia grafica sarà scritta da destra a sinistra. Questa è una potenzialità fornita da Qt. Questa documentazione è stata scritta pensando che l'opzione "Lingue scritte da destra a sinistra" e l'aspetto grafico "reverse" non siano attivati. Altrimenti alcuni riferimenti a "destra" e "sinistra" dovranno essere scambiati per utilizzare correttamente queste opzioni.

#### Varie

(Queste opzioni ed azioni sono disponibile nei menu o nelle barre dei pulsanti).

Mostra i numeri di riga:

- Puoi selezionare se, per il file di ingresso, il numero di riga deve essere visualizzato.

Mostra anche le differenze date da spazi e tabulatori:

- Alcune volte la visualizzazione degli spazi e dei tabulatori disturba. È possibile eliminarla.

Mostra spazio bianco:

- Disabilita questo per sopprimere ogni evidenziazione di spazi bianchi cambiati nel testo o nelle colonne di sommario (Nota che questo è anche applicato a cambiamenti nei numeri o nei commenti se sono attive le opzioni "Ignora numeri" o "Ignora commenti C/C++").

Opzioni di impaginazione:

- Queste opzioni sono disponibili solo quando si confrontano tre file. Nella modalità normale tutte le differenze vengono mostrate in una colonna riassuntiva con colori codificati. Però, a volte, potrebbe servirti evidenziare solo le differenze tra due dei tre file. Selezionando confronto di "A con B", "A con C" o "B con C" si aprirà, a fianco di quella normale, una seconda colonna riassuntiva con le informazioni richieste.

A capo nelle finestre delle differenze:

- Le righe più lunghe della larghezza della finestra vengono mostrate su più righe.

Mostra finestra A/B/C:

- Alle volte vuoi usare meglio lo spazio dello schermo per righe lunghe. Nascondere le finestre che non sono importanti (Nel menu di Finestra).

Inverti orientamento divisione:

- Inverti tra la finestra delle differenze e le altre (A a sinistra di B a sinistra di C) o sopra le altre (A sopra B sopra C). Questo potrebbe anche aiutare in presenza di molte righe (Nel menu di Finestra).

Avviare velocemente una fusione:

- Alcune volte stai visualizzando le differenze e decidi di fondere. "Fondi il file corrente" nel menu di Directory funziona anche solo comparando due file. Un solo clic ed inizia la fusione che utilizza, come predefinito, il nome del file dell'ultimo file considerato (Quando questo è utilizzato per far ripartire la fusione, allora il nome del file di output sarà mantenuto).

#### Configurazione delle scorciatoie da tastiera

Attualmente solo la versione KDE supporta la configurazione personalizzata dei tasti scorciatoia. (Menu Impostazioni->Configurazione Scorciatoie...)

### Comandi per il preprocessore

Kdiff3 prevede due opzioni per il preprocessore.

Comandi del preprocessore

- Quando un file viene letto, esso sarà inoltrato come ingresso a questo comando esterno. Il risultato del comando sarà considerato al posto del file originale. Potrai scrivere un tuo preprocessore in base alle tue esigenze. Utilizzalo per tagliare parti di file che disturbano, o per correggere automaticamente l'indentazione, ecc.

Comando del preprocessore per confrontare righe:

- Quando un file viene letto, esso viene trattato da questo comando esterno. Se viene specificato un comando come preprocessore (vedi sopra), allora l'uscita dal preprocessore è anche l'ingresso del preprocessore che confronta le righe. Il risultato sarà usato durante la fase di analisi delle righe coincidenti. Puoi scrivere un tuo preprocessore personalizzato che risolva le tue esigenze. Ogni riga in ingresso deve avere una riga corrispondente in uscita.

L'idea è quella di permettere la maggior flessibilità possibile nell'impostare il risultato del confronto. Purtroppo ciò richiede l'uso di un programma esterno, e molti utenti non hanno voglia di scriversene uno. La buona notizia è che molto spesso`sed` o `perl` sono perfettamente in grado di svolgere il lavoro richiesto.

Un semplice esempio con un file di testo: prendi il file a.txt (6 righe):

          aa
          ba
          ca
          da
          ea
          fa

e il file b.txt (3 righe):

          cg
          dg
          eg

Senza un preprocessore appariranno le seguenti righe affiancate:

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

Probabilmente non era quello che desideravi, poiché la prima lettera contiene l'informazione realmente interessante. Per aiutare l'algoritmo di confronto ad ignorare la seconda lettera potremmo usare come preprocessore un comando che rimpiazzi riga per riga "g" con "a":

       sed 's/g/a/'

Con questo comando il risultato del confronto sarà:

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

Internamente l'algoritmo di confronto usa i file elaborati riga per riga dal preprocessore, ma sullo schermo il file non appare modificato. Un preprocessore normale avrebbe cambiato anche i dati visualizzati.

#### Basi del `sed`

Questa sezione spiega sommariamente alcune possibilità elementari di `sed`. Per maggiori informazioni vedi info:/sed o http://www.gnu.org/software/sed/manual/html_mono/sed.html. Puoi trovare una versione di sed precompilata per Windows a http://unxutils.sourceforge.net. nota che gli esempi che seguono danno per scontato che l'eseguibile di `sed` sia in una directory della variabile di ambiente PATH. Se non fosse vero, dovrai specificare il percorso completo dell'eseguibile. Nota anche che negli esempi si usano le virgolette semplici ('), che non funzionano in Windows. Sotto Windows dovrai usare al loro posto le virgolette doppie (").

In questo paragrafo userò solo il comando di `sed` per sostituire.:

       sed 's/ESPR_REGOLARE/NUOVO_TESTO/FLAG'

Prima di usare un nuovo comando in Kdiff3 sarebbe meglio provarlo in una console. Per farlo è utile il comando `echo`. Ad esempio:

       echo abracadabra | sed 's/a/o/'
       -> obracadabra

Questo esempio mostra un semplicissimo comando sed che sostituisce la prima occorrenza di "a" con "o". Se tu volessi sostituire tutte le occorrenze, ti basterebbe aggiungere il flag "g":

       echo abracadabra | sed 's/a/o/g'
       -> obrocodobro

Il simbolo "|" è il comando "pipe" che incanala l'uscita dal comando precedente nell'ingresso del comando successivo. Se vuoi fare una prova su un file più lungo, puoi usare `cat` nei sistemi di tipo Unix o `type` in sistemi di tipo Windows. `sed` opererà una sostituzione riga per riga.

    cat nome_file | sed opzioni

#### Esempi di utilizzi di `sed` in KDiff3

##### Ignorare altri tipi commenti

Attualmente KDiff3 riconosce solo i commenti di C/C++. Usando il preprocessore per il confronto delle righe in ingresso puoi fare in modo che altri tipi di commento vengano ignorati. basterà convertirli in commenti di tipo C/C++. Ad esempio, per ignorare commenti che iniziano con "#", potresti convertirli in "//". Tieni presente che dovrai anche attivare l'opzione "Ignora i commenti C/C++" affinché il trucco funzioni. Un appropriato comando per preprocessore le righe potrebbe essere:

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

Poiché per `sed` il carattere "/" ha un significato speciale, è necessario porre un carattere "\" prima di ogni "/" nella stringa del nuovo testo. Spesso il carattere "\" è richiesto per aggiungere o togliere un significato speciale a certi caratteri. La virgoletta semplice (') all'inizio e alla fine del comando di sostituzione è molto importante qui. Altrimenti la shell cercherebbe di interpretare cerci caratteri speciali (ad es. '#', '$' or '\' ) prima di passarli a `sed`. Tieni presente che in Windows devi usare le virgolette doppie (") a questo scopo. Windows sostituisce altri caratteri come "%", quindi è meglio fare qualche prova.

##### Ignorare distinzione maiuscole/minuscole

Usa questo comando per preprocessare le righe in modo da convertire tutto in maiuscolo:

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

".*" è un'espressione regolare che corrisponde con tutte le stringhe e, in questo contesto, con tutti i caratteri della riga. Il "\1" nella stringa di sostituzione rappresenta il testo trovato in corrispondenza al contenuto della prima coppia di parentesi "\(" e "\)". La "\U" converte in maiuscolo il testo inserito.

##### Ignorare le keyword per il controllo della versione

CVS ed altri sistemi per il controllo delle versioni utilizzano molte parole chiave per inserire stringhe generate automaticamente (info:/cvs/Keyword substitution). Esse seguono lo schema comune "$KEYWORD testo generato$". A questo punto ci serve un comando per il preprocessore che rimuova solo il testo generato:

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

Le "\|" separano le possibili parole chiave. Puoi modificare questa lista in base alle tue esigenze. La "\" prima del "$" è necessaria, altrimenti il "$" verrebbe interpretato come "fine della riga".

Nel provare `sed` potrai incominciare a capire ed apprezzare queste strane "espressioni regolari". Esse sono particolarmente utili perché molti altri programmi utilizzano cose molto simili.

##### Ignorare i numeri

Attualmente c'è un'opzione interna che permette di ignorare i numeri. Però è utile vedere come lo si può fare con un comando per il preprocessore.

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

Ogni carattere compreso tra le parentesi quadre verrà riconosciuto e sostituito con nulla.

##### Ignorare alcune colonne

A volte un testo è formattato molto rigorosamente e contiene delle colonne che tu vuoi ignorare, mentre ci sono altre colonne che tu vuoi esaminare. Nel seguente esempio le prime 5 colonne (ciascuna di un carattere) verranno ignorate, poi vengono salvate 10 colonne, ignorate altre cinque e salvato il resto della riga.

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

Ogni punto "." rappresenta un carattere. "\1" e "\2" nella stringa del nuovo testo indicano il contenuto della prima e seconda coppia "\(" e "\)", ossia il testo da preservare.

##### Combinare piùsostituzioni

A volte, potresti voler applicare contemporaneamente diverse sostituzioni. In tal caso basta usare un punto e virgola ";" per separarle l'una dall'altra. Ad esempio:

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

##### Utilizzare `perl` invece di `sed`

Invece di `sed` potresti voler utilizzare un altro comando, ad esempio `perl`.

       perl -p -e 's/ESPR_REGOLAR/NUOVO_TESTO/FLAGS'

Ma in `perl` alcuni particolari sono differenti. Nota, ad esempio, che mentre `sed` vuole "\(" e "\)", in `perl` serve un più semplice "(" e ")", non precedute da '\'. Esempio:

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

#### Precedenze nel preprocessare i dati

I dati sono incanalati (piped) attraverso tutti i preprocessori interni ed esterni nel seguente ordine:

- Preprocessore normale,

- Preprocessore esterno riga per riga,

- Ignorare differenze maiuscolo/minuscolo (tutto in maiuscolo),

- Individuare commenti C/C++:

- Ignorare i numeri,

- Ignorare spazi bianchi,

I dati, dopo essere passati dal preprocessore normale saranno utilizzati sia per essere mostrati che fusi. Le altre operazioni modificano solo i dati visti dall'algoritmo che controlla le differenze tra le righe corrispondenti.

Nei rari casi in cui si usa il preprocessore normale bisogna tener presente che il preprocessore sul contenuto delle righe utilizza l'uscita del preprocessore normale come proprio ingresso.

#### Attenzione

I comandi per il preprocessore sono spesso utilissimi ma, come succede con ogni opzione che modifichi i vostri testi o che nasconda automaticamente certe differenze, potrebbero farti sfuggire differenze significative o, nel peggiore dei casi, distruggere dati importanti.

Per questa ragione, se durante una fusione è in funzione un comando del preprocessore normale, KDiff3 ti chiederà se vuoi disattivarlo. Però non ti avviserà se è attivo un comando del preprocessore sul contenuto delle righe. La fusione non sarà completata se prima non saranno risolti tutti i conflitti. Se hai disabilitato "Mostra gli spazi bianchi" anche le differenze che son state rimosse con il preprocessore sul contenuto delle righe saranno del tutto invisibili. Se il bottone "Salva" rimane disattivato durante una fusione (perché sussistono dei conflitti), assicurati di aver attivato "Mostra gli spazi bianchi". Se poi non vorrai sistemare manualmente le differenze meno importanti, potrai azionare "Scegli [A|B|C] per per risolvere tutti i conflitti di spazi bianchi" nel menu "Fondi".

## 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 quell'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.

#### La colonna delle statistiche

Quando è attiva l'opzione "Analisi completa" per il confronto, KDiff3 mostrerà delle colonne supplementari contenenti il numero di conflitti non risolti, risolti, relativi a spazi non bianchi e relativi a spazi bianchi. La colonna dei conflitti risolti verrà mostrata solo quando si confrontano o fondono tre directory.

### 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 scansionata).

Se così sei soddisfatto, il resto è facile.

Per fondere tutti gli elementi: Seleziona "Avvia/Continua la funzione directory" nel menu "Directory" o premi il tasto F7 (la scorciatoia). Per fondere solamente l'elemento attualmente selezionato: Seleziona "Avvia operazione 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 considerati 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 virgola ";" come separatore. Caratteri jolly possibili: '*' 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. Caratteri jolly 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 file system 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 scansionate 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.

Modalità di confronto dei file:

- Confronto binario:

- Questa è la modalità di confronto predefinita.

Analisi completa:

- Opera un analisi approfondita di ogni file e mostra le colonne con le informazioni statistiche (numero di conflitti non risolti, risolti, relativi a spazi non bianchi e relativi a spazi bianchi). L'analisi completa è più lenta di una semplice analisi binaria, e ancora più lenta se applicata a file non di testo. (Indica il "file-antipatterns" appropriato).

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 un 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"

## Argomenti vari

### Trasparenza di rete con TDEIO

#### Gli slave TDEIO

KDE supporta la trasparenza di rete tramite gli slave TDEIO. KDiff3 utilizza questo metodo per leggere i file in ingresso e per la scansione delle directory. Questo significa che è possibile specificare file e directory in locale o in remoto tramite URL.

Esempio:

    kdiff3 test.cpp  ftp://ftp.faraway.org/test.cpp
       kdiff3 tar:/home/hacker/archive.tar.gz/dir ./dir

La prima riga confronta un file locale con un file su un server FTP. La seconda riga confronta una directory all'interno di un un archivio compresso con una directory locale.

Altri slave TDEIO interessanti sono:

- File da WWW (http:),

- File da FTP (ftp:),

- Trasferimento file crittografato (fish:, sftp:),

- Windows-resources (smb:),

- File locali (file:),

Altre cose che sono possibili, ma probabilmente meno utili sono:

- Man-pages (man:),

- Info-pages (info:),

#### Come scrivere gli URL

Un URL ha una sintassi diversa se comparata con un percorso per i file e le directory locali. Dovrebbe essere considerate alcune cose:

- Un percorso può essere relativo e può contenere "." o "..". Quando non è possibile con URL che sono sempre assoluti.

- I caratteri speciali devono essere scritti con l'"escaping". ("#"->"%23", spazio->"%20", ecc.) Es. Un file con nome "/#pippo#" dovrebbe avere l'URL "file:/%23pippo%23".

- Quando un URL non funziona come ci si aspettava, prova ad aprirlo prima con Konqueror.

#### Possibilità di TDEIO-Slaves

La trasparenza della rete ha uno svantaggio. Non tutte le risorse hanno le stesse possibilità.

Alcune volte questo è causato dal file system del server, altre volte dal protocollo. Di seguito una breve lista delle limitazioni:

- Alcune volte i collegamenti non sono supportati.

- O non c'è modo di distinguere se il collegamento punti ad un file o ad una directory; spesso si assume a file. (ftp:, sftp:).

- Dimensione del file non sempre determinabile.

- Supporto limitato per permessi.

- Non è possibile cambiareare permessi o date di modifica, altrimenti i permessi e la data della copia sarebbero diversi dall'originale. (Vedere l'opzione "Basati sulla dimensione"). Queste operazioni sono permesse solo per i file locali.

### Usare &kdiff3; come un KPart

&kdiff3; è un KPart. Attualmente esso implementa l'interfaccia KParts::ReadOnlyPart.

In KDevelop l'uso principale è come visualizzatore di differenze. KDevelop fa sempre partire prima il visualizzatore delle differenze interno. Per richiamare KDiff3 premi il tasto destro del mouse nella finestra delle differenze e seleziona "Mostra nel KDiff3Part" dal menu contestuale.

KDiff3 richiede normalmente due file completi in ingresso. Quando usato come componente KDiff3 assumerà che il file di input sia un file di patch con un formato indefinito. KDiff3 recupererà il nome del file originale dal file patch. Almeno uno dei due file deve essere disponibile. KDiff3 invocherà quindi `patch` per ricreare il secondo file.

In Konqueror puoi selezionare un file di patch e selezionare dal menu contestuale "Preview in"-"KDiff3Part". Attenzione che questo non funzionerà se nessun file originale è disponibile e non è sicuro se i file originali sono stati modificati prima della generazione del file di patch.

Quando avviato come componente KDiff3 ha due finestre di comparazione e una piccola barra degli strumenti e un piccolo menu. La fusione o la comparazione delle directory non sono quindi supportate.

## Domande e risposte

&reporting.bugs; &updating.documentation;

Perché il nome "KDiff3"?

Gli strumenti "KDiff" e "KDiff2" (ora "Kompare") esistono già. Inoltre "KDiff3" dovrebbe suggerire che può fondere come il programma "diff3" presente nella collezione Diff-Tool.

Perché ho registrato sotto GPL?

Utilizzando programmi GPL da molto tempo ed ho imparato molto guardando altri sorgenti. Così questo è il mio "Grazie" a tutti i programmatori che a loro volta hanno fatto lo stesso.

Mancano alcuni pulsanti e funzioni. Cos'è errato?

Si sta compilando dai sorgenti, ma probabilmente non è stato correttamente specificato KDE-prefix con configure. Se non specificato configure installerà in usr/local, ma in questa maniera KDE non potrà trovare il file delle informazioni di risorse dell'interfaccia utente (es: kdiff3ui.rc).Il file README contiene molte informazioni su come correggere il prefisso.

Spesso le righe che sono simili ma non uguali appaiono dopo le altre ma alcune volte no. Perché?

Le righe che presentano differenze per soli spazi bianchi sono trattate inizialmente come "uguali", mentre altre differenze porteranno al risultato di righe "differenti". Se righe simili appaiono dopo delle altre è una coincidenza ma questo fortunatamente è spesso il caso.

Perché tutti i conflitti devono essere risolti prima salvare il risultato della fusione?

Per ogni sezione diversa o uguale l'editor, nella finestra del risultato di fusione, ricorda dove queste iniziano e finiscono. Questo è necessario in quanto i conflitti possono essere risolti manualmente semplicemente selezionando il pulsante del sorgente (A/B o C). Questa informazione saranno perse successivamente al salvataggio del testo in quanto è troppo oneroso creare un file specializzato al mantenimento di tutte le informazioni per il ripristino.

Perché l'editor nella finestra del risultato di fusione non presenta la funzione di annulla modifica?

Questa funzione richiedeva troppo sforzo. È sempre possibile ripristinare la versione facendo clic il pulsante rispettivo (A/B o C).

Quando rimuovo parte del testo, appare improvvisamente "<No src line>" e non può essere eliminato. Cosa significa e come può essere rimosso?

Per ogni sezione diversa o uguale l'editor, nella finestra di risultato della fusione, ricorda dove inizia e dove finisce. "<No src line>"significa che non è rimasto nulla nella sezione, nemmeno un carattere di nuova riga. Questo può capitare sia nella fusione automatica che in quella manuale. Questo non è un problema, poiché non apparirà nel file salvato. Se vuoi tornare al file originale è sufficiente selezionare la sezione (fai un clic sulla colonna di sommario con il tasto sinistro del mouse) quindi fai clic sul pulsante del sorgente con il contenuto voluto (A/B e C).

Perché KDiff3 non supporta l'evidenziazione della sintassi?

KDiff3 già usa molti colori per le differenti evidenziazioni e molte di queste potrebbero essere confuse. Per questi scopi usa un altro editor.

Qui si possono trovare molte informazioni, ma la tua domanda non ha ancora una risposta?

Sei pregato di inviarmi le tue domanda. Ogni commento sarà apprezzato.

## Riconoscimenti e Licenza

&kdiff3; - Strumento per comparare e fondere file e directory

Copyright sul programma 2002-2005 Joachim Eibl joachim.eibl at gmx.de

Sono ben accette nuove idee e segnalazioni di errori da colleghi e da tutte le persone della grande rete WWW. Grazie!

Copyright della documentazione © 2002-2005 Joachim Eibl joachim.eibl at gmx.de

Traduzione 2004: Stelvio Rosset srosset@satelgroup.net

Aggiornamento e revisione della traduzione (2005): AndreaCelli a.celli@caltanet.it

&underFDL; &underGPL;

## Installazione

### Come procurarsi &kdiff3;

È possibile scaricare la versione più recente di KDiff3 da http://kdiff3.sourceforge.net.

KDiff3 è disponibile anche per altre piattaforme. Per maggiori dettagli consultare la homepage.

### Requisiti

Per sfruttare tutte le potenzialità di &kdiff3; serve &kde;3.1 o successivo.

Per informazioni riguardanti KDiff3 su altre piattaforme sprovviste di KDE si rimanda a homepage.

La lista dei cambiamenti la puoi trovare sul sito http://kdiff3.sourceforge.net/ChangeLog oppure nel file "ChangeLog" del pacchetto dei sorgenti.

### Compilazione ed installazione

Al fine di compilare ed installare &kdiff3; sul tuo sistema con KDE, posizionati sulla directory base della distribuzione &kdiff3; e digita:

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

`kde-dir` specifica la directory contenente KDE nel tuo sistema. Se non sei sicuro, leggi il file README per maggiori dettagli.

Dato che &kdiff3; utilizza `autoconf` e `automake` non dovresti avere problemi nel compilarlo. Se invece pensi di aver trovato un problema sei pregato di segnalarlo alla &kde; mailing list.

&documentation.index;