hgbook

diff it/ch05-daily.xml @ 804:16c50eea5366

Minor changes and translation of code snippets for Ch.14.
author Giulio@puck
date Sat Aug 15 03:01:38 2009 +0200 (2009-08-15)
parents bdea936798c4
children 1df12479f7e5
line diff
     1.1 --- a/it/ch05-daily.xml	Fri Jul 31 23:39:38 2009 +0200
     1.2 +++ b/it/ch05-daily.xml	Sat Aug 15 03:01:38 2009 +0200
     1.3 @@ -5,13 +5,13 @@
     1.4    <sect1>
     1.5      <title>Aggiungere file a un repository Mercurial</title>
     1.6  
     1.7 -    <para id="x_1a3">Mercurial non lavora con i file nel vostro repository a meno che voi non gli diciate di gestirli. Il comando <command role="hg-cmd">hg status</command> vi dirà quali sono i file che Mercurial non conosce, usando un <quote><literal>?</literal></quote> per mostrare tali file.</para>
     1.8 -
     1.9 -    <para id="x_1a4">Per dire a Mercurial di tenere traccia di un file, usate il comando <command role="hg-cmd">hg add</command>. Una volta che avete aggiunto un file, la voce per quel file nell'elenco visualizzato da <command role="hg-cmd">hg status</command> cambia da <quote><literal>?</literal></quote> a <quote><literal>A</literal></quote>.</para>
    1.10 +    <para id="x_1a3">Mercurial lavora solo con i file che gli dite di gestire nel vostro repository. Il comando <command role="hg-cmd">hg status</command> vi dirà quali sono i file che Mercurial non conosce, usando un <quote><literal>?</literal></quote> per mostrare questi file.</para>
    1.11 +
    1.12 +    <para id="x_1a4">Per dire a Mercurial di tenere traccia di un file, usate il comando <command role="hg-cmd">hg add</command>. Una volta che avete aggiunto un file, la voce per quel file nell'elenco visualizzato da <command role="hg-cmd">hg status</command> cambia da <quote><literal>?</literal></quote> ad <quote><literal>A</literal></quote>.</para>
    1.13  
    1.14        &interaction.daily.files.add;
    1.15  
    1.16 -    <para id="x_1a5">Dopo aver eseguito <command role="hg-cmd">hg commit</command>, i file che avete aggiunto prima dell'inserimento non verranno più elencati dal comando <command role="hg-cmd">hg status</command>, perché il comportamento predefinito di <command role="hg-cmd">hg status</command> è quello di segnalarvi solo i file <quote>interessanti</quote> come quelli che avete (per esempio) modificato, rimosso, o rinominato. Se avete un repository che contiene migliaia di file, vorrete raramente sapere qualcosa dei file che Mercurial ha già registrato ma che non sono cambiati. (Potete comunque ottenere questa informazione, come vedremo più avanti.)</para>
    1.17 +    <para id="x_1a5">Dopo aver eseguito <command role="hg-cmd">hg commit</command>, i file che avete aggiunto prima dell'inserimento non verranno più elencati dal comando <command role="hg-cmd">hg status</command>, perché il comportamento predefinito di <command role="hg-cmd">hg status</command> è quello di segnalarvi solo i file <quote>interessanti</quote> come (per esempio) quelli che avete modificato, rimosso, o rinominato. Se avete un repository che contiene migliaia di file, vorrete raramente sapere qualcosa dei file che Mercurial ha già registrato ma che non sono cambiati. (Potete comunque ottenere questa informazione, come vedremo più avanti.)</para>
    1.18  
    1.19      <para id="x_1a6">Mercurial non agisce immediatamente su un file che avete appena aggiunto, ma scatterà una fotografia dello stato del file la prossima volta che eseguirete un commit. Poi continuerà a tenere traccia dei cambiamenti che apportate al file ogni volta che eseguite un commit, fino a quando non rimuoverete il file.</para>
    1.20  
    1.21 @@ -22,9 +22,9 @@
    1.22  
    1.23        &interaction.daily.files.add-dir;
    1.24  
    1.25 -      <para id="x_1a8">Notate che, in questo esempio, Mercurial ha stampato i nomi dei file che ha aggiunto, mentre non lo ha fatto quando abbiamo aggiunto il file <filename>myfile.txt</filename> nell'esempio precedente.</para>
    1.26 -
    1.27 -      <para id="x_1a9">Questo accade perché, nel primo esempio, abbiamo esplicitamente designato il file da aggiungere sulla linea di comando. In questi casi, Mercurial assume che sappiamo ciò che stiamo facendo, per cui non stampa alcuna informazione.</para>
    1.28 +      <para id="x_1a8">Notate che, in questo esempio, Mercurial ha stampato i nomi dei file che ha aggiunto, mentre non lo ha fatto quando abbiamo aggiunto il file <filename>miofile.txt</filename> nell'esempio precedente.</para>
    1.29 +
    1.30 +      <para id="x_1a9">Questo accade perché, nel primo esempio, abbiamo esplicitamente nominato il file da aggiungere sulla riga di comando. In questi casi, Mercurial assume che sappiamo ciò che stiamo facendo, per cui non stampa alcuna informazione.</para>
    1.31  
    1.32        <para id="x_1aa">Tuttavia, quando <emphasis>implichiamo</emphasis> i nomi dei file dando il nome di una directory, Mercurial compie il passo aggiuntivo di stampare il nome di ogni file su cui agisce. Questo rende più chiaro ciò che sta succedendo e riduce la probabilità di una sorpresa sgradita e silenziosa. La maggior parte dei comandi Mercurial si comporta in questo modo.</para>
    1.33      </sect2>
    1.34 @@ -34,13 +34,13 @@
    1.35  
    1.36        <para id="x_1ab">Mercurial non tiene traccia delle informazioni sulle directory, ma tiene traccia del percorso di un file. Prima di creare un file, crea tutte le directory mancanti che ne compongono il percorso. Dopo che ha cancellato un file, cancella ogni directory vuota che faceva parte del percorso del file cancellato. Questa sembra una distinzione irrilevante, ma ha una conseguenza pratica di secondaria importanza: Mercurial non vi permette di rappresentare una directory completamente vuota.</para>
    1.37  
    1.38 -      <para id="x_1ac">Le directory vuote sono raramente utili, e ci sono soluzioni non invadenti che potete usare per ottenere un effetto appropriato. Quindi, gli sviluppatori di Mercurial hanno deciso che la complessità che sarebbe stata richiesta per gestire le directory vuote non valesse il limitato beneficio che questa funzionalità avrebbe portato.</para>
    1.39 -
    1.40 -      <para id="x_1ad">Se avete bisogno di una directory vuota nel vostro repository, ci sono alcuni modi per ottenerla. Uno dei modi possibili è quello di creare una directory e usare <command role="hg-cmd">hg add</command> per aggiungere un file <quote>nascosto</quote> a quella directory. Sui sistemi di tipo Unix, ogni file il cui nome comincia con un punto (<quote><literal>.</literal></quote>) viene considerato nascosto dalla maggior parte dei comandi e dalle applicazioni con interfaccia grafica. Questo approccio è illustrato qui di seguito.</para>
    1.41 -
    1.42 -&interaction.daily.files.hidden;
    1.43 -
    1.44 -      <para id="x_1ae">Un altro modo per soddisfare il bisogno di una directory vuota è semplicemente quello di farla creare al vostro script automatico di costruzione del progetto nel momento in cui ne avete bisogno.</para>
    1.45 +      <para id="x_1ac">Le directory vuote sono raramente utili e ci sono soluzioni non invadenti che potete usare per ottenere un effetto appropriato. Quindi, gli sviluppatori di Mercurial hanno deciso che la complessità che sarebbe stata richiesta per gestire le directory vuote non valesse il limitato beneficio che questa caratteristica avrebbe portato.</para>
    1.46 +
    1.47 +      <para id="x_1ad">Se avete bisogno di una directory vuota nel vostro repository, ci sono alcuni modi per ottenerla. Uno dei modi possibili è quello di creare una directory e usare <command role="hg-cmd">hg add</command> per aggiungere un file <quote>nascosto</quote> a quella directory. Sui sistemi di tipo Unix, ogni file il cui nome comincia con un punto (<quote><literal>.</literal></quote>) viene considerato nascosto dalla maggior parte dei comandi e delle applicazioni con interfaccia grafica. Questo approccio è illustrato qui di seguito.</para>
    1.48 +
    1.49 +      &interaction.daily.files.hidden;
    1.50 +
    1.51 +      <para id="x_1ae">Un altro modo per soddisfare il bisogno di una directory vuota è semplicemente quello di farla creare al vostro programma automatico di assemblaggio del progetto nel momento in cui ne avete bisogno.</para>
    1.52      </sect2>
    1.53    </sect1>
    1.54  
    1.55 @@ -60,7 +60,7 @@
    1.56        <itemizedlist>
    1.57  	<listitem><para id="x_1b2">Cancella la versione corrente del file dalla directory di lavoro.</para>
    1.58  	</listitem>
    1.59 -	<listitem><para id="x_1b3">Induce Mercurial a smettere di tenere traccia dei cambiamenti al file dal commit successivo in poi.</para>
    1.60 +	<listitem><para id="x_1b3">Induce Mercurial a smettere di monitorare i cambiamenti del file dal commit successivo in poi.</para>
    1.61  	</listitem></itemizedlist>
    1.62        <para id="x_1b4">La rimozione di un file <emphasis>non</emphasis> altera la <emphasis>cronologia</emphasis> del file in alcun modo.</para>
    1.63  
    1.64 @@ -86,7 +86,7 @@
    1.65      <sect2>
    1.66        <title>Digressione: perché dire esplicitamente a Mercurial di rimuovere un file?</title>
    1.67  
    1.68 -      <para id="x_1b9">Potreste chiedervi perché Mercurial vi costringe a dirgli esplicitamente che state cancellando un file. Nelle prime fasi di sviluppo, Mercurial vi permetteva di cancellare un file nel modo che preferivate: avrebbe notato automaticamente l'assenza del file durante la successiva esecuzione di <command role="hg-cmd">hg commit</command> e avrebbe smesso di tenerne traccia. In pratica, questo modo di operare rendeva troppo facile rimuovere accidentalmente un file senza accorgersene.</para>
    1.69 +      <para id="x_1b9">Potreste chiedervi perché Mercurial vi costringe a dirgli esplicitamente che state cancellando un file. Nelle prime fasi di sviluppo, Mercurial vi permetteva di cancellare un file nel modo che preferivate: avrebbe notato automaticamente l'assenza del file durante la successiva esecuzione di <command role="hg-cmd">hg commit</command> e avrebbe smesso di monitorarlo. In pratica, questo modo di operare rendeva troppo facile rimuovere accidentalmente un file senza accorgersene.</para>
    1.70      </sect2>
    1.71  
    1.72      <sect2>
    1.73 @@ -134,7 +134,7 @@
    1.74  
    1.75        &interaction.daily.copy.other;
    1.76  
    1.77 -      <para id="x_1c3">Ora abbiamo un <filename>file</filename> modificato in questo repository. Quando estraiamo i cambiamenti dal primo repository e uniamo le due teste, Mercurial propagherà i cambiamenti che abbiamo apportato localmente a <filename>file</filename> nella sua copia <filename>new-file</filename>.</para>
    1.78 +      <para id="x_1c3">Ora abbiamo un <filename>file</filename> modificato in questo repository. Quando estraiamo i cambiamenti dal primo repository e uniamo le due teste, Mercurial propagherà i cambiamenti che abbiamo apportato localmente a <filename>file</filename> nella sua copia <filename>nuovo-file</filename>.</para>
    1.79  
    1.80        &interaction.daily.copy.merge;
    1.81      </sect2>
    1.82 @@ -160,13 +160,13 @@
    1.83      <sect2>
    1.84        <title>Come <emphasis>evitare</emphasis> che i cambiamenti seguano una copia</title>
    1.85  
    1.86 -      <para id="x_1cb">Se per qualche ragione decidete che questa faccenda di propagare automaticamente i cambiamenti verso le copie non fa per voi, utilizzate il normale comando per la copia dei file fornito dal vostro sistema (<command>cp</command> per i sistemi di tipo Unix) per effettuare la copia di un file, poi aggiungete a mano la nuova copia invocando <command role="hg-cmd">hg add</command>. Prima di farlo, però, rileggete la <xref linkend="sec:daily:why-copy"/> e prendete una decisione informata sulla validità di questo comportamento nel vostro caso specifico.</para>
    1.87 +      <para id="x_1cb">Se per qualche ragione decidete che questa faccenda di propagare automaticamente i cambiamenti verso le copie non fa per voi, utilizzate il normale comando per la copia di file fornito dal vostro sistema (<command>cp</command> per i sistemi di tipo Unix) per effettuare la copia di un file, poi aggiungete a mano la nuova copia invocando <command role="hg-cmd">hg add</command>. Prima di farlo, però, rileggete la <xref linkend="sec:daily:why-copy"/> e prendete una decisione informata sulla validità di questo comportamento nel vostro caso specifico.</para>
    1.88  
    1.89      </sect2>
    1.90      <sect2>
    1.91        <title>Il comportamento del comando <command role="hg-cmd">hg copy</command></title>
    1.92  
    1.93 -      <para id="x_1cc">Quando usate il comando <command role="hg-cmd">hg copy</command>, Mercurial esegue la copia di qualsiasi file sorgente contenuto nella directory di lavoro nello stato in cui si trova in quel momento. Questo significa che, se fate alcune modifiche a un file e poi lo copiate tramite <command role="hg-cmd">hg copy</command> senza prima aver inserito quelle modifiche nel repository, anche la nuova copia conterrà le modifiche che avete apportato fino a quel momento. (Trovo che questo comportamento sia leggermente controintuitivo ed è per questo che lo menziono qui.)</para>
    1.94 +      <para id="x_1cc">Quando usate il comando <command role="hg-cmd">hg copy</command>, Mercurial esegue la copia dei file originali contenuti nella directory di lavoro nello stato in cui si trovano in quel momento. Questo significa che, se fate alcune modifiche a un file e poi lo copiate tramite <command role="hg-cmd">hg copy</command> senza prima aver inserito quelle modifiche nel repository, anche la nuova copia conterrà le modifiche che avete apportato fino a quel momento. (Trovo che questo comportamento sia leggermente controintuitivo ed è per questo che lo menziono qui.)</para>
    1.95  
    1.96        <para id="x_1cd">Il comando <command role="hg-cmd">hg copy</command> agisce in maniera simile al comando Unix <command>cp</command> (potete usare l'alias <command role="hg-cmd">hg cp</command> se preferite). Dobbiamo fornirgli due o più argomenti, di cui l'ultimo viene trattato come <emphasis>destinazione</emphasis> e tutti gli altri vengono trattati come <emphasis>sorgenti</emphasis>.</para>
    1.97  
    1.98 @@ -184,9 +184,9 @@
    1.99  
   1.100        <para id="x_1d0">Se la sorgente e la destinazione sono entrambe directory, l'albero della sorgente viene ricreato nella directory di destinazione.</para>
   1.101  
   1.102 -	&interaction.daily.copy.dir-src-dest;
   1.103 -
   1.104 -      <para id="x_1d1">Come con il comando <command role="hg-cmd">hg remove</command>, se copiate un file manualmente e poi volete informare Mercurial di avere copiato il file, usate semplicemente l'opzione <option role="hg-opt-copy">--after</option> per <command role="hg-cmd">hg copy</command>.</para>
   1.105 +      &interaction.daily.copy.dir-src-dest;
   1.106 +
   1.107 +      <para id="x_1d1">Come con il comando <command role="hg-cmd">hg remove</command>, se copiate un file manualmente e poi volete informare Mercurial di aver copiato il file, usate semplicemente l'opzione <option role="hg-opt-copy">--after</option> di <command role="hg-cmd">hg copy</command>.</para>
   1.108  
   1.109        &interaction.daily.copy.after;
   1.110      </sect2>
   1.111 @@ -195,32 +195,32 @@
   1.112    <sect1>
   1.113      <title>Rinominare i file</title>
   1.114  
   1.115 -    <para id="x_1d2">&Egrave; molto più comune avere bisogno di rinominare un file piuttosto che copiarlo. La ragione per cui ho discusso il comando <command role="hg-cmd">hg copy</command> prima di parlare di come rinominare i file è che Mercurial tratta un cambiamento di nome essenzialmente nello stesso modo di una copia. Perciò, se sapete cosa fa Mercurial quando copiate un file, sapete anche cosa aspettarvi quando rinominate un file.</para>
   1.116 -
   1.117 -    <para id="x_1d3">Quando usate il comando <command role="hg-cmd">hg rename</command>, Mercurial crea una copia di ogni file sorgente, poi li cancella e segnala i file come rimossi.</para>
   1.118 -
   1.119 -      &interaction.daily.rename.rename;
   1.120 +    <para id="x_1d2">&Egrave; molto più comune aver bisogno di rinominare un file piuttosto che aver bisogno di copiarlo. La ragione per cui ho discusso il comando <command role="hg-cmd">hg copy</command> prima di parlare di come rinominare i file è che Mercurial tratta un cambiamento di nome essenzialmente nello stesso modo di una copia. Perciò, se sapete cosa fa Mercurial quando copiate un file, sapete anche cosa aspettarvi quando rinominate un file.</para>
   1.121 +
   1.122 +    <para id="x_1d3">Quando usate il comando <command role="hg-cmd">hg rename</command>, Mercurial crea una copia del file originale, poi lo cancella e segnala il file come rimosso.</para>
   1.123 +
   1.124 +    &interaction.daily.rename.rename;
   1.125  
   1.126      <para id="x_1d4">Il comando <command role="hg-cmd">hg status</command> mostra la nuova copia del file come aggiunta e il file da cui è stata effettuata la copia come rimosso.</para>
   1.127  
   1.128      &interaction.daily.rename.status;
   1.129  
   1.130 -    <para id="x_1d5">Come accade per i risultati del comando <command role="hg-cmd">hg copy</command>, dobbiamo dare l'opzione <option role="hg-opt-status">-C</option> al comando <command role="hg-cmd">hg status</command> per vedere Mercurial considera il file aggiunto come una copia del file originale ora rimosso.</para>
   1.131 +    <para id="x_1d5">Come accade per i risultati del comando <command role="hg-cmd">hg copy</command>, dobbiamo usare l'opzione <option role="hg-opt-status">-C</option> del comando <command role="hg-cmd">hg status</command> per vedere che Mercurial considera il file aggiunto come una copia del file originale ora rimosso.</para>
   1.132  
   1.133      &interaction.daily.rename.status-copy;
   1.134  
   1.135      <para id="x_1d6">Come con <command role="hg-cmd">hg remove</command> e <command role="hg-cmd">hg copy</command>, potete usare l'opzione <option role="hg-opt-rename">--after</option> per informare Mercurial del cambiamento di nome dopo che il fatto è avvenuto. Nella maggior parte degli altri aspetti, il comportamento del comando <command role="hg-cmd">hg rename</command> e le opzioni che accetta sono simili a quelli del comando <command role="hg-cmd">hg copy</command>.</para>
   1.136  
   1.137 -    <para id="x_686">Se avete familiarità con la riga di comando Unix, sarete contenti di sapere che il comando <command role="hg-cmd">hg rename</command> può essere invocato come <command role="hg-cmd">hg mv</command>.</para>
   1.138 +    <para id="x_686">Se avete familiarità con la riga di comando Unix, sarete felici di sapere che il comando <command role="hg-cmd">hg rename</command> può essere invocato come <command role="hg-cmd">hg mv</command>.</para>
   1.139  
   1.140      <sect2>
   1.141        <title>Rinominare i file e unire i cambiamenti</title>
   1.142  
   1.143 -      <para id="x_1d7">Dato che Mercurial rinomina i file tramite un'operazione di copia-e-rimozione, i cambiamenti vengono propagati allo stesso modo quando effettuate un'unione sia dopo aver copiato un file che dopo averlo rinominato.</para>
   1.144 +      <para id="x_1d7">Dato che Mercurial rinomina i file tramite un'operazione di copia-e-rimozione, i cambiamenti vengono propagati nello stesso modo quando effettuate un'unione sia dopo aver copiato un file che dopo averlo rinominato.</para>
   1.145  
   1.146        <para id="x_1d8">Se io modifico un file e voi lo rinominate e poi uniamo i nostri rispettivi cambiamenti, le mie modifiche al file con il suo nome originale verranno propagate al file con il suo nuovo nome. (Vi potreste aspettare che questo <quote>funzioni e basta</quote> ma in realtà non tutti i sistemi di controllo di revisione lo fanno.)</para>
   1.147  
   1.148 -      <para id="x_1d9">Sebbene la propagazione dei cambiamenti alle copie sia una funzionalità che potreste approvare dicendo <quote>sì, questo potrebbe essere utile,</quote> deve essere chiaro che propagare i cambiamenti ai file rinominati è assolutamente importante. Senza questo meccanismo, i cambiamenti a un file si potrebbero perdere con troppa facilità quando il file viene rinominato.</para>
   1.149 +      <para id="x_1d9">Sebbene la propagazione dei cambiamenti alle copie sia una funzione che potreste approvare dicendo <quote>sì, questo potrebbe essere utile,</quote> deve essere chiaro che propagare i cambiamenti ai file rinominati è assolutamente importante. Senza questo meccanismo, i cambiamenti a un file si potrebbero perdere con troppa facilità quando il file viene rinominato.</para>
   1.150      </sect2>
   1.151  
   1.152      <sect2>
   1.153 @@ -236,11 +236,11 @@
   1.154  
   1.155        <para id="x_1dc">Nel frattempo, Bruno lo rinomina <filename>quux</filename>. (Ricordatevi che <command role="hg-cmd">hg mv</command> è un alias di <command role="hg-cmd">hg rename</command>.)</para>
   1.156  
   1.157 -	&interaction.rename.divergent.rename.bob;
   1.158 +      &interaction.rename.divergent.rename.bob;
   1.159  
   1.160        <para id="x_1dd">Mi piace pensare a questo come a un conflitto perché entrambi gli sviluppatori hanno espresso intenzioni differenti a proposito di come il file dovrebbe essere chiamato.</para>
   1.161  
   1.162 -      <para id="x_1de">Cosa pensate che dovrebbe accadere quando uniscono il loro lavoro? L'effettivo comportamento di Mercurial è quello di preservare sempre <emphasis>entrambi</emphasis> i nomi quando unisce changeset che contengono cambiamenti di nome divergenti.</para>
   1.163 +      <para id="x_1de">Cosa pensate che dovrebbe accadere quando Anna e Bruno uniscono il loro lavoro? L'effettivo comportamento di Mercurial è quello di preservare sempre <emphasis>entrambi</emphasis> i nomi quando unisce changeset che contengono cambiamenti di nome divergenti.</para>
   1.164  
   1.165        &interaction.rename.divergent.merge;
   1.166  
   1.167 @@ -268,7 +268,7 @@
   1.168  
   1.169      <para id="x_1e2">Mercurial possiede alcuni comandi utili che vi aiuteranno a rimediare a diversi errori comuni.</para>
   1.170  
   1.171 -    <para id="x_1e3">Il comando <command role="hg-cmd">hg revert</command> vi permette di annullare i cambiamenti che avete apportato alla vostra directory di lavoro. Per esempio, se avete aggiunto un file invocando <command role="hg-cmd">hg add</command> per errore, vi basta eseguire <command role="hg-cmd">hg revert</command> con il nome del file che avete aggiunto e il file non verrà toccato in alcun modo né sarà più registrato per essere aggiunto da Mercurial. Potete anche usare <command role="hg-cmd">hg revert</command> per disfarvi di cambiamenti sbagliati apportati a un file.</para>
   1.172 +    <para id="x_1e3">Il comando <command role="hg-cmd">hg revert</command> vi permette di annullare i cambiamenti che avete apportato alla vostra directory di lavoro. Per esempio, se avete aggiunto un file invocando <command role="hg-cmd">hg add</command> per errore, vi basta eseguire <command role="hg-cmd">hg revert</command> con il nome del file che avete aggiunto e il file non verrà toccato in alcun modo né sarà più considerato per essere aggiunto da Mercurial. Potete anche usare <command role="hg-cmd">hg revert</command> per disfarvi di cambiamenti sbagliati apportati a un file.</para>
   1.173  
   1.174      <para id="x_1e4">&Egrave; utile ricordare che il comando <command role="hg-cmd">hg revert</command> serve per i cambiamenti che non avete ancora inserito. Una volta che avete inserito un cambiamento, se decidete che è stato un errore potete ancora fare qualcosa, sebbene le vostre opzioni siano molto più limitate.</para>
   1.175  
   1.176 @@ -300,7 +300,7 @@
   1.177  
   1.178      &interaction.ch04-resolve.heads;
   1.179  
   1.180 -    <para id="x_68d">Normalmente, se eseguissimo il comando <command role="hg-cmd">hg merge</command> a questo punto, ci verrebbe presentata un'applicazione grafica tramite la quale riconciliare manualmente le modifiche in conflitto su <filename>myfile.txt</filename>. Tuttavia, per semplificare le cose ai fini della presentazione, vorremmo invece che l'unione fallisse immediatamente. Ecco un modo in cui possiamo farlo.</para>
   1.181 +    <para id="x_68d">Normalmente, se eseguissimo il comando <command role="hg-cmd">hg merge</command> a questo punto, ci verrebbe presentata un'applicazione grafica tramite la quale riconciliare manualmente le modifiche in conflitto su <filename>miofile.txt</filename>. Tuttavia, per semplificare le cose ai fini della presentazione, vorremmo invece che l'unione fallisse immediatamente. Ecco un modo in cui possiamo farlo.</para>
   1.182  
   1.183      &interaction.ch04-resolve.export;
   1.184  
   1.185 @@ -332,11 +332,11 @@
   1.186  
   1.187        <para id="x_695">Se Mercurial vede un <emphasis>qualsiasi</emphasis> file nello stato irrisolto dopo un'unione, considera fallita l'unione. Fortunatamente, non abbiamo bisogno di ricominciare l'intera unione da zero.</para>
   1.188  
   1.189 -      <para id="x_696">L'opzione <option role="hg-opt-resolve">--list</option> o <option role="hg-opt-resolve">-l</option> per il comando <command role="hg-cmd">hg resolve</command> mostra lo stato di ogni file coinvolto in un'unione.</para>
   1.190 +      <para id="x_696">L'opzione <option role="hg-opt-resolve">--list</option> o <option role="hg-opt-resolve">-l</option> del comando <command role="hg-cmd">hg resolve</command> mostra lo stato di ogni file coinvolto in un'unione.</para>
   1.191  
   1.192        &interaction.ch04-resolve.list;
   1.193  
   1.194 -      <para id="x_697">Nell'elenco stampato da <command role="hg-cmd">hg resolve</command>, un file risolto è contrassegnato con una <literal>R</literal> mentre un file irrisolto è contrassegnato con una <literal>U</literal>.  Se un file qualsiasi viene elencato con una  <literal>U</literal>, sappiamo che un tentativo di inserire i risultati dell'unione nel repository andrebbe incontro al fallimento.</para>
   1.195 +      <para id="x_697">Nell'elenco stampato da <command role="hg-cmd">hg resolve</command>, un file risolto è contrassegnato con una <literal>R</literal> mentre un file irrisolto è contrassegnato con una <literal>U</literal>.  Se un file qualsiasi viene elencato con una  <literal>U</literal>, sappiamo che un tentativo di inserire i risultati dell'unione nel repository andrà incontro al fallimento.</para>
   1.196      </sect2>
   1.197  
   1.198      <sect2>
   1.199 @@ -344,7 +344,7 @@
   1.200  
   1.201        <para id="x_698">Abbiamo diverse opzioni per far passare un file dallo stato irrisolto a quello risolto. Quella di gran lunga più comune consiste nell'eseguire nuovamente <command role="hg-cmd">hg resolve</command>. Se passiamo i nomi di singoli file o directory, il comando riproverà a unire i file irrisolti presenti in quelle ubicazioni. Possiamo anche passare l'opzione <option role="hg-opt-resolve">--all</option> o <option role="hg-opt-resolve">-a</option> per riprovare a unire <emphasis>tutti</emphasis> i file irrisolti.</para>
   1.202  
   1.203 -      <para id="x_699">Mercurial ci permette anche di modificare direttamente lo stato di risoluzione di un file. Possiamo contrassegnare manualmente un file come risolto usando l'opzione <option role="hg-opt-resolve">--mark</option> o come irrisolto usando l'opzione <option role="hg-opt-resolve">--unmark</option>. Questo ci consente di ripulire a mano un'unione particolarmente confusa e di tenere traccia dei nostri progressi con ogni file man mano che procediamo.</para>
   1.204 +      <para id="x_699">Mercurial ci permette anche di modificare direttamente lo stato di risoluzione di un file. Possiamo contrassegnare manualmente un file come risolto usando l'opzione <option role="hg-opt-resolve">--mark</option> o come irrisolto usando l'opzione <option role="hg-opt-resolve">--unmark</option>. Questo ci consente di ripulire a mano un'unione particolarmente disordinata e di tenere traccia dei nostri progressi con ogni file man mano che procediamo.</para>
   1.205      </sect2>
   1.206    </sect1>
   1.207  
   1.208 @@ -365,7 +365,7 @@
   1.209  
   1.210      &interaction.ch04-diff.chmod;
   1.211  
   1.212 -    <para id="x_6cb">Il normale comando <command>diff</command> non fa attenzione di permessi dei file, perciò la semplice invocazione di <command role="hg-cmd">hg diff</command> non stampa nulla. Se però utilizziamo l'opzione <option>-g</option>, il comando ci dice che cos'è realmente accaduto.</para>
   1.213 +    <para id="x_6cb">Il normale comando <command>diff</command> non considera i permessi dei file, perciò la semplice invocazione di <command role="hg-cmd">hg diff</command> non stampa nulla. Se però utilizziamo l'opzione <option>-g</option>, il comando ci dice che cos'è realmente accaduto.</para>
   1.214  
   1.215      &interaction.ch04-diff.chmod.git;
   1.216    </sect1>
   1.217 @@ -383,7 +383,7 @@
   1.218  
   1.219      <para id="x_6d0">Per esempio, un sistema distribuito di controllo di revisione non può, per sua natura, offrire un meccanismo di bloccaggio dei file. Quindi non esiste alcun meccanismo predefinito per evitare che due persone apportino cambiamenti in conflitto a un file binario. Se fate parte di un gruppo in cui diverse persone potrebbero modificare frequentemente i file binari, potrebbe non essere una buona idea impiegare Mercurial&emdash;o un qualsiasi altro sistema distribuito di controllo di revisione&emdash;per gestire quei file.</para>
   1.220  
   1.221 -    <para id="x_6d1">Quando memorizza le modifiche a un file, di solito Mercurial salva solo le differenze tra la versione corrente del file e quella precedente. Per la maggior parte dei file di testo questo approccio si rivela estremamente efficiente. Tuttavia, alcuni file (in particolare i file binari) sono costruiti in modo tale che persino una piccola modifica al contenuto logico del file risulta nel cambiamento di molti o della maggior parte dei byte contenuti nel file. Per esempio, i file compressi sono particolarmente sensibili a questo effetto. Se le differenze tra ogni versione di un file e la successiva sono sempre grandi, Mercurial non riuscirà a memorizzare la cronologia del file in maniera molto efficiente. Questo potrebbe avere effetti sia sul bisogno di spazio di memorizzazione locale sia sulla quantità di tempo che viene impiegata per clonare un repository.</para>
   1.222 +    <para id="x_6d1">Quando memorizza le modifiche a un file, di solito Mercurial salva solo le differenze tra la versione corrente del file e quella precedente. Per la maggior parte dei file di testo questo approccio si rivela estremamente efficiente. Tuttavia, alcuni file (in particolare i file binari) sono fatti in modo tale che persino una piccola modifica al contenuto logico del file risulta nel cambiamento di molti o della maggior parte dei byte contenuti nel file. Per esempio, i file compressi sono particolarmente sensibili a questo effetto. Se le differenze tra ogni versione di un file e la successiva sono sempre grandi, Mercurial non riuscirà a memorizzare la cronologia del file in maniera molto efficiente. Questo potrebbe avere effetti sia sul bisogno di spazio di memorizzazione locale sia sulla quantità di tempo che viene impiegata per clonare un repository.</para>
   1.223  
   1.224      <para id="x_6d2">Per avere un'idea di come questo problema potrebbe riguardarvi nella pratica, supponete di voler usare Mercurial per gestire un documento OpenOffice. OpenOffice memorizza i documenti su disco sotto forma di file zip compressi. Modificate anche solo una lettera nel vostro documento in OpenOffice e quasi ogni byte nell'intero file cambierà quando lo salverete. Ora supponete che le dimensioni di quel file siano di 2MB. Dato che la maggior parte del file cambia ogni volta che lo salvate, Mercurial dovrà memorizzare tutti i 2MB del file ogni volta che eseguite un commit, anche se dal vostro punto di vista forse solo poche parole vengono cambiate ogni volta. Un singolo file modificato frequentemente che non rispetti le assunzioni dei meccanismi di memorizzazione di Mercurial può facilmente avere un effetto fuori misura sulle dimensioni del repository.</para>
   1.225  
   1.226 @@ -406,10 +406,10 @@
   1.227  
   1.228      <para id="x_6d7">Dato che Mercurial mantiene una copia completa della cronologia in ogni clone, chiunque usi Mercurial per collaborare su un progetto può potenzialmente agire come una sorgente di backup nell'eventualità di una catastrofe. Se un repository centrale diventa inaccessibile, potete costruire un rimpiazzo semplicemente clonando una copia del repository da un collaboratore ed estraendo dai repository di altre persone qualsiasi cambiamento che quella copia potrebbe non avere visto.</para>
   1.229  
   1.230 -    <para id="x_6d8">Usare Mercurial per effettuare backup separati e mirror remoti è piuttosto semplice. Impostate un'attività periodica (e.g. tramite il comando <command>cron</command>) su un server remoto per estrarre i cambiamenti dai vostri repository principali ogni ora. Questa operazione sarà complicata solo nell'improbabile caso in cui il numero di repository principali che mantenete cambi frequentemente, eventualità che potrete affrontare utilizzando uno script per programmare l'aggiornamento della lista dei repository di cui fare il backup.</para>
   1.231 -
   1.232 -    <para id="x_6d9">Se effettuate un backup tradizionale dei vostri repository principali su nastro o su disco e volete fare il backup di un repository chiamato <filename>myrepo</filename>, usate il comando <command>hg clone -U myrepo myrepo.bak</command> per creare un clone di <filename>myrepo</filename> prima di cominciare a registrare i vostri backup. L'opzione <option>-U</option> evita di popolare la directory di lavoro dopo che la clonazione si è conclusa, dato che sarebbe superfluo e renderebbe più lungo il backup.</para>
   1.233 -
   1.234 -    <para id="x_6da">Se poi effettuate il backup di <filename>myrepo.bak</filename> invece di <filename>myrepo</filename>, avrete la garanzia di possedere una fotografia consistente del vostro repository a cui nessuno sviluppatore insonne trasmetterà i propri cambiamenti nel bel mezzo di un'operazione di backup.</para>
   1.235 +    <para id="x_6d8">Usare Mercurial per effettuare backup separati e mirror remoti è piuttosto semplice. Impostate un'attività periodica (e.g. tramite il comando <command>cron</command>) su un server remoto per estrarre i cambiamenti dai vostri repository principali ogni ora. Questa operazione diventerà complicata solo nell'improbabile caso in cui il numero dei repository principali che mantenete cambi frequentemente, eventualità che potrete affrontare utilizzando uno script per programmare l'aggiornamento della lista dei repository di cui fare il backup.</para>
   1.236 +
   1.237 +    <para id="x_6d9">Se effettuate un backup tradizionale dei vostri repository principali su nastro o su disco e volete fare il backup di un repository chiamato <filename>miorepo</filename>, usate il comando <command>hg clone -U miorepo miorepo.bak</command> per creare un clone di <filename>miorepo</filename> prima di cominciare a registrare i vostri backup. L'opzione <option>-U</option> evita di popolare la directory di lavoro dopo che la clonazione si è conclusa, dato che sarebbe superfluo e renderebbe più lungo il backup.</para>
   1.238 +
   1.239 +    <para id="x_6da">Se poi effettuate il backup di <filename>miorepo.bak</filename> invece di <filename>miorepo</filename>, avrete la garanzia di possedere una fotografia consistente del vostro repository a cui nessuno sviluppatore insonne trasmetterà i propri cambiamenti nel bel mezzo di un'operazione di backup.</para>
   1.240    </sect1>
   1.241  </chapter>