hgbook

changeset 798:7f684caba2d0

Minor changes and translation of code snippets for Ch.6.
author Giulio@puck
date Thu Aug 13 23:46:21 2009 +0200 (2009-08-13)
parents 26b05b7dd445
children 51f5fd4969eb
files it/ch06-collab.xml it/examples/auto-snippets.xml it/examples/branching.clone.it it/examples/branching.init.it it/examples/branching.main.it it/examples/branching.merge.it it/examples/branching.stable.it it/examples/branching.tag.it it/examples/branching.update.it it/examples/ch06-apache-config.lst.it
line diff
     1.1 --- a/it/ch06-collab.xml	Thu Aug 13 18:57:50 2009 +0200
     1.2 +++ b/it/ch06-collab.xml	Thu Aug 13 23:46:21 2009 +0200
     1.3 @@ -2,7 +2,7 @@
     1.4    <?dbhtml filename="collaborare-con-altre-persone.html"?>
     1.5    <title>Collaborare con altre persone</title>
     1.6  
     1.7 -  <para id="x_44a">Essendo uno strumento completamente decentralizzato, Mercurial non impone alcuna politica su come le persone dovrebbero lavorare insieme. Tuttavia, se siete nuovi al controllo di revisione distribuito, conoscere alcuni strumenti ed esempi può aiutarvi a ragionare sui possibili modelli di workflow da adottare.</para>
     1.8 +  <para id="x_44a">Essendo uno strumento completamente decentralizzato, Mercurial non impone alcuna politica su come le persone dovrebbero lavorare insieme. Tuttavia, se per voi il controllo di revisione distribuito è una novità, conoscere alcuni strumenti ed esempi può aiutarvi a ragionare sui possibili modelli di workflow da adottare.</para>
     1.9  
    1.10    <sect1>
    1.11      <title>L'interfaccia web di Mercurial</title>
    1.12 @@ -11,7 +11,7 @@
    1.13  
    1.14      <para id="x_44c">L'interfaccia web vi permette di navigare interattivamente un singolo repository o una collezione di repository. Potete vedere la cronologia di un repository, esaminare qualsiasi cambiamento (con i commenti e le differenze) e vedere il contenuto di qualsiasi file o directory. Potete persino ottenere una vista della cronologia che vi fornisce una rappresentazione grafica delle relazioni tra le unioni e i singoli cambiamenti.</para>
    1.15  
    1.16 -    <para id="x_44d">L'interfaccia web offre ai visitatori anche i feed RSS e Atom dei cambiamenti in un repository. Questo vi permette di <quote>abbonarvi</quote> a un repository usando il vostro lettore di feed preferito e di venire automaticamente informati sulle attività in quel repository non appena si svolgono. Trovo questa possibilità molto più conveniente rispetto al modello di iscrizione a una mailing list a cui sono spedite le notifiche, in quanto non richiede alcuna configurazione aggiuntiva da parte di chiunque stia servendo il repository.</para>
    1.17 +    <para id="x_44d">L'interfaccia web offre ai visitatori anche i feed RSS e Atom dei cambiamenti in un repository. Questo vi permette di <quote>abbonarvi</quote> a un repository usando il vostro lettore di feed preferito e di venire automaticamente informati sulle attività in quel repository non appena cominciano. Trovo questa possibilità molto più conveniente rispetto al modello di iscrizione a una mailing list a cui sono spedite le notifiche, in quanto non richiede alcuna configurazione aggiuntiva da parte di chiunque stia servendo il repository.</para>
    1.18  
    1.19      <para id="x_44e">L'interfaccia web consente agli utenti remoti anche di clonare un repository, estrarne i cambiamenti e (quando il server è configurato per permetterlo) trasmettervi le proprie modifiche. Mercurial comprime aggressivamente i dati incapsulando il protocollo HTTP in modo da lavorare con grande efficienza persino attraverso connessioni di rete a banda ridotta.</para>
    1.20  
    1.21 @@ -32,13 +32,13 @@
    1.22      <para id="x_451">Con uno strumento adeguatamente flessibile, prendere decisioni sul workflow non è tanto una sfida tecnica quanto una sfida di ingegneria sociale. Mercurial impone poche limitazioni su come potete strutturare il flusso di lavoro in un progetto, quindi sta a voi e al vostro gruppo impostare e procedere con un modello che corrisponda ai vostri particolari bisogni.</para>
    1.23  
    1.24      <sect2>
    1.25 -      <title>Fattori da tenere a mente</title>
    1.26 -
    1.27 -      <para id="x_452">L'aspetto più importante che dovete tenere a mente per qualsiasi modello è il grado di conformità ai bisogni e alle capacità delle persone che lo useranno. Questo potrebbe sembrare ovvio, ma in ogni caso non potete comunque permettervi di dimenticarvelo nemmeno per un momento.</para>
    1.28 +      <title>Fattori da considerare</title>
    1.29 +
    1.30 +      <para id="x_452">L'aspetto più importante che dovete tenere presente per qualsiasi modello è il grado di conformità ai bisogni e alle capacità delle persone che lo useranno. Questo potrebbe sembrare ovvio, ma in ogni caso non potete comunque permettervi di dimenticarvelo nemmeno per un momento.</para>
    1.31  
    1.32        <para id="x_453">Una volta mi capitò di comporre un modello di workflow che a me sembrava perfettamente sensato, ma che provocò una quantità considerevole di litigi e costernazione tra i membri del mio gruppo di sviluppo. Nonostante i miei tentativi di spiegare perché avessimo bisogno di un insieme complesso di ramificazioni e come i cambiamenti dovessero circolare tra i rami, alcuni membri del gruppo si ribellarono. Sebbene fossero persone intelligenti, non volevano fare attenzione ai vincoli sotto i quali stavamo operando, né affrontare le conseguenze di quei vincoli sui dettagli del modello che stavo difendendo.</para>
    1.33  
    1.34 -      <para id="x_454">Evitate di nascondere sotto il tappeto i prevedibili problemi di tipo sociale o tecnico. Qualunque schema adottiate, dovreste avere un piano per affrontare errori e scenari problematici. Prendete in considerazione l'idea di aggiungere meccanismi automatici per prevenire o risolvere velocemente i problemi che siete in grado di anticipare. Per esempio, se intendete avere un ramo con cambiamenti che non desiderate rilasciare al pubblico, fareste meglio a pensare fin dall'inizio alla possibilità che qualcuno possa accidentalmente incorporare quei cambiamenti in un ramo di release. Potete evitare questo particolare problema implementando un hook che prevenga l'unione di cambiamenti da rami non appropriati.</para>
    1.35 +      <para id="x_454">Evitate di nascondere sotto il tappeto i prevedibili problemi di tipo tecnico o sociale. Qualunque schema adottiate, dovreste avere un piano per affrontare errori e scenari problematici. Prendete in considerazione l'idea di aggiungere meccanismi automatici per prevenire o risolvere velocemente i problemi che siete in grado di anticipare. Per esempio, se intendete avere un ramo con cambiamenti che non desiderate rilasciare al pubblico, fareste meglio a pensare fin dall'inizio alla possibilità che qualcuno possa accidentalmente incorporare quei cambiamenti in un ramo di release. Potete evitare questo particolare problema implementando un hook che prevenga l'unione di cambiamenti da rami non appropriati.</para>
    1.36      </sect2>
    1.37  
    1.38      <sect2>
    1.39 @@ -46,11 +46,11 @@
    1.40  
    1.41        <para id="x_455">Non vorrei suggerire che un approccio in cui <quote>tutto è permesso</quote> sia qualcosa di sostenibile, ma è un modello che è facile da capire e funziona perfettamente in alcune situazioni inusuali.</para>
    1.42  
    1.43 -      <para id="x_456">Per esempio, molti progetti hanno un gruppo sparso di collaboratori che si incontrano fisicamente solo di rado. Alcuni gruppi preferiscono superare l'isolamento del lavoro a distanza organizzando <quote>maratone</quote> occasionale in cui un certo numero di persone si ritrova insieme in un'unico posto (la stanza delle riunioni di un'azienda, la sala delle conferenze in un hotel, posti di questo tipo) e passa diversi giorni più o meno chiuso lì, a lavorare intensamente su una manciata di progetti.</para>
    1.44 -
    1.45 -      <para id="x_457">Una maratona o una sessione di programmazione in un locale sono le occasioni perfette per usare il comando <command role="hg-cmd">hg serve</command>, dato che	<command role="hg-cmd">hg serve</command> non richiede alcuna infrastruttura server elaborata. Potete cominciare a usare <command role="hg-cmd">hg serve</command> in pochi momenti, leggendo la <xref linkend="sec:collab:serve"/> più avanti. Poi vi basta comunicare ai vostri vicini l'esistenza di un server in esecuzione, fargli sapere l'URL a cui devono collegarsi, e avrete un modo veloce da predisporre per lavorare insieme. Gli altri potranno digitare il vostro URL nel proprio browser e revisionare velocemente i vostri cambiamenti, o estrarre la correzione di un bug dal vostro repository e verificarla, o clonare un ramo contenente una nuova funzionalità e provarla.</para>
    1.46 -
    1.47 -      <para id="x_458">Il fascino, e il problema, di fare le cose ad hoc in questo modo è che solo le persone che sanno dell'esistenza dei vostri cambiamenti e sanno dove trovarli possono vederli. Un approccio informale di questo tipo non riesce proprio a scalare oltre a una manciata di persone, perché ogni individuo ha bisogno di conoscere <emphasis>n</emphasis> diversi repository da cui estrarre modifiche.</para>
    1.48 +      <para id="x_456">Per esempio, molti progetti hanno un gruppo sparso di collaboratori che si incontrano fisicamente solo di rado. Alcuni gruppi preferiscono superare l'isolamento del lavoro a distanza organizzando <quote>maratone</quote> occasionali in cui un certo numero di persone si ritrova insieme in un'unico luogo (la stanza delle riunioni di un'azienda, la sala delle conferenze in un hotel, posti di questo tipo) e passa diversi giorni più o meno chiuso lì, a lavorare intensamente su una manciata di progetti.</para>
    1.49 +
    1.50 +      <para id="x_457">Una maratona o una sessione di programmazione in un locale sono le occasioni perfette per usare il comando <command role="hg-cmd">hg serve</command>, dato che	<command role="hg-cmd">hg serve</command> non richiede alcuna infrastruttura server elaborata. Potete cominciare a usare <command role="hg-cmd">hg serve</command> in pochi minuti, leggendo la <xref linkend="sec:collab:serve"/> più avanti. Poi vi basta comunicare ai vostri vicini l'esistenza di un server in esecuzione, fargli sapere l'URL a cui devono collegarsi, e avrete un modo rapido da predisporre per lavorare insieme. Gli altri potranno digitare il vostro URL nel proprio browser e revisionare velocemente i vostri cambiamenti, o estrarre la correzione di un bug dal vostro repository e verificarla, o clonare un ramo contenente una nuova funzione e provarla.</para>
    1.51 +
    1.52 +      <para id="x_458">Il fascino, e allo stesso tempo il problema, di fare le cose ad hoc in questo modo è che solo le persone che sanno dell'esistenza dei vostri cambiamenti e sanno dove trovarli possono vederli. Un approccio informale di questo tipo non riesce proprio a scalare oltre a una manciata di persone, perché ogni individuo ha bisogno di conoscere <emphasis>n</emphasis> diversi repository da cui estrarre modifiche.</para>
    1.53      </sect2>
    1.54  
    1.55      <sect2>
    1.56 @@ -60,7 +60,7 @@
    1.57  
    1.58        <para id="x_45a">I collaboratori cominciano clonando una copia di questo repository, potendo estrarne i cambiamenti ogni volta che ne hanno bisogno. Alcuni sviluppatori (forse tutti) hanno il permesso di trasmettere le modifiche al repository quando sono pronte per essere viste da altre persone.</para>
    1.59  
    1.60 -      <para id="x_45b">In questo modello, può ancora aver senso che alcune persone propaghino i cambiamenti direttamente tra loro, senza passare dal repository centrale. Considerate il caso in cui io ho una possibile correzione di un bug, ma sono preoccupato che, se la pubblicassi sul repository centrale, tutti gli altri possano successivamente danneggiare i propri alberi nel momento in cui la estraggono. Per ridurre il danno potenziale, posso chiedervi di clonare temporaneamente il mio repository in un vostro repository privato e di collaudare la correzione. Questo ci permette di rimandare la pubblicazione di cambiamenti potenzialmente pericolosi fino a quando non hanno subìto una ragionevole verifica.</para>
    1.61 +      <para id="x_45b">In questo modello, può ancora aver senso che alcune persone propaghino i cambiamenti direttamente tra loro, senza passare dal repository centrale. Considerate il caso in cui io ho creato una possibile correzione di un bug, ma sono preoccupato che, se la pubblicassi sul repository centrale, tutti gli altri possano successivamente danneggiare i propri alberi nel momento in cui la estraggono. Per ridurre il danno potenziale, posso chiedervi di clonare temporaneamente il mio repository in un vostro repository privato e di collaudare la correzione. Questo ci permette di rimandare la pubblicazione di cambiamenti potenzialmente pericolosi fino a quando non hanno subìto una ragionevole verifica.</para>
    1.62  
    1.63        <para id="x_45c">Se un gruppo sta mantenendo il repository sui propri server in questo tipo di scenario, di solito i membri useranno il protocollo <command>ssh</command> per trasmettere in sicurezza i cambiamenti al repository centrale, come documentato nella <xref linkend="sec:collab:ssh"/>. Di solito, viene anche pubblicata una copia del repository in sola lettura via HTTP, come nella <xref linkend="sec:collab:cgi"/>. Pubblicare via HTTP soddisfa le necessità di chi non ha accesso in scrittura e di chi preferisce usare un browser per navigare la cronologia del repository.</para>
    1.64      </sect2>
    1.65 @@ -68,17 +68,17 @@
    1.66      <sect2>
    1.67        <title>Un repository centrale su un servizio di hosting</title>
    1.68  
    1.69 -      <para id="x_6a1">Una caratteristica meravigliosa dei servizi hosting come	<ulink url="http://bitbucket.org/">Bitbucket</ulink> è che non solo si occupano di gestire i dettagli della configurazione del server, come gli account utente, l'autenticazione e i protocolli sicuri di rete, ma offrono anche un'infrastruttura aggiuntiva per far funzionare al meglio questo modello.</para>
    1.70 -
    1.71 -      <para id="x_6a2">Per esempio, un servizio hosting ben ingegnerizzato consentirà alle persone di clonare le proprie copie di un repository con un singolo clic, in modo da farli lavorare in spazi separati e lasciarli condividere i propri cambiamenti quando sono pronti.</para>
    1.72 -
    1.73 -      <para id="x_6a3">In più, un buon servizio hosting permetterà alle persone di comunicare tra loro, per esempio per segnalare che <quote>questo albero contiene modifiche pronte per la tua revisione</quote>.</para>
    1.74 +      <para id="x_6a1">Una caratteristica meravigliosa dei servizi di hosting come	<ulink url="http://bitbucket.org/">Bitbucket</ulink> è che non solo si occupano di gestire i dettagli della configurazione del server, come gli account utente, l'autenticazione e i protocolli sicuri di rete, ma offrono anche un'infrastruttura aggiuntiva per far funzionare al meglio questo modello.</para>
    1.75 +
    1.76 +      <para id="x_6a2">Per esempio, un servizio di hosting ben ingegnerizzato consentirà agli sviluppatori di clonare le proprie copie di un repository con un singolo clic, in modo da farli lavorare in spazi separati e lasciarli condividere i propri cambiamenti quando sono pronti.</para>
    1.77 +
    1.78 +      <para id="x_6a3">In più, un buon servizio di hosting permetterà alle persone di comunicare tra loro, per esempio per segnalare che <quote>questo albero contiene modifiche pronte per la tua revisione</quote>.</para>
    1.79      </sect2>
    1.80  
    1.81      <sect2>
    1.82        <title>Lavorare con più rami</title>
    1.83  
    1.84 -      <para id="x_45d">Qualsiasi progetto di dimensioni significative tende a fare progressi su più fronti contemporaneamente. Nel caso del software, un progetto passa comunemente attraverso una serie di release ufficiali periodiche. Una release potrebbe andare in fase di <quote>manutenzione</quote> per un po' dopo la sua prima pubblicazione, finendo per contenere solo correzioni di bug, senza che vengano aggiunte nuove funzionalità. Una o più release future potrebbero trovarsi in lavorazione in parallelo a queste revisioni di manutenzione. Normalmente le persone usano il termine <quote>ramo</quote> (branch) per indicare una di queste direzioni leggermente differenti in cui lo sviluppo sta procedendo.</para>
    1.85 +      <para id="x_45d">Qualsiasi progetto di dimensioni significative tende a fare progressi su più fronti contemporaneamente. Nel caso del software, un progetto passa comunemente attraverso una serie di release ufficiali periodiche. Una release potrebbe andare in fase di <quote>manutenzione</quote> per un po' dopo la sua prima pubblicazione, finendo per contenere solo correzioni di bug, senza che vengano aggiunte nuove funzioni. Una o più release future potrebbero trovarsi in lavorazione in parallelo a queste revisioni di manutenzione. Normalmente le persone usano il termine <quote>ramo</quote> (in inglese, branch) per indicare una di queste direzioni leggermente differenti in cui lo sviluppo sta procedendo.</para>
    1.86  
    1.87        <para id="x_45e">Mercurial è particolarmente adatto a gestire un certo numero di rami paralleli ma non identici. Ogni <quote>direzione di sviluppo</quote> può vivere nel proprio repository centrale e voi potete unire cambiamenti dall'uno all'altro repository quando ne avete bisogno. Dato che i repository sono tra loro indipendenti, i cambiamenti instabili in un ramo di sviluppo non avranno mai effetto su un ramo stabile a meno che qualcuno incorpori esplicitamente quei cambiamenti nel ramo stabile.</para>
    1.88  
    1.89 @@ -90,13 +90,13 @@
    1.90  
    1.91        <para id="x_461">Una volta che il ramo principale raggiunge la milestone (letteralmente, pietra miliare) di una release, potete usare il comando <command role="hg-cmd">hg tag</command> per dare un nome permanente alla revisione di milestone.</para>
    1.92  
    1.93 -	&interaction.branching.tag;
    1.94 -
    1.95 -      <para id="x_462">Diciamo che alcuni sviluppi esterni accadono sul ramo principale.</para>
    1.96 +      &interaction.branching.tag;
    1.97 +
    1.98 +      <para id="x_462">Diciamo che alcune modifiche esterne vengono effettuate sul ramo principale.</para>
    1.99  
   1.100        &interaction.branching.main;
   1.101  
   1.102 -      <para id="x_463">Usando l'etichetta registrata sulla milestone, chi clonerà quel repository in futuro potrà usare <command role="hg-cmd">hg update</command> per ottenere una copia della directory di lavoro nello stato esatto in cui si trovava quando quella revisione etichettata è stata inserita.</para>
   1.103 +      <para id="x_463">Grazie all'etichetta registrata sulla milestone, chi clonerà quel repository in futuro potrà usare <command role="hg-cmd">hg update</command> per ottenere una copia della directory di lavoro nello stato esatto in cui si trovava quando quella revisione etichettata è stata inserita.</para>
   1.104  
   1.105        &interaction.branching.update;
   1.106  
   1.107 @@ -148,17 +148,17 @@
   1.108  
   1.109        <para id="x_46f">Al centro della comunità siede Linus Torvalds, il creatore di Linux. Linus pubblica un singolo repository di sorgenti che è considerato il ramo <quote>autoritativo</quote> corrente dall'intera comunità di sviluppo. Chiunque può clonare l'albero di Linus, ma Linus è piuttosto selettivo per quanto riguarda gli alberi da cui estrae le modifiche.</para>
   1.110  
   1.111 -      <para id="x_470">Linus ha un certo numero di <quote>luogotenenti fidati</quote>. Come regola generale, estrae qualunque cambiamento gli trasmettano, nella maggior parte dei casi senza nemmeno revisionare quelle modifiche. Alcuni di quei luogotenenti hanno accettato il ruolo di <quote>manutentori</quote> responsabili di specifici sottosistemi del kernel. Se un programmatore qualsiasi vuole che la propria modifica a un sottosistema del kernel finisca nell'albero di Linus, deve trovare il manutentore di quel sottosistema e chiedergli di accettarla. Se il manutentore revisiona le modifiche e accetta di prenderle, le passerà a Linus al momento giusto.</para>
   1.112 -
   1.113 -      <para id="x_471">Ogni singolo luogotenente ha il proprio approccio per revisionare, accettare e pubblicare le modifiche, e per decidere quando passarle a Linus. In più, esistono diversi rami ben noti che vengono usati per scopi differenti. Per esempio, alcune persone mantengono repository <quote>stabili</quote> di vecchie versioni del kernel, alle quali applicano correzioni critiche quando è necessario. Alcuni manutentori pubblicano molteplici alberi: uno per modifiche sperimentali, uno per cambiamenti che stanno per passare in alto, e così via. Altri pubblicano semplicemente un singolo albero.</para>
   1.114 +      <para id="x_470">Linus ha un certo numero di <quote>luogotenenti di fiducia</quote>. Come regola generale, estrae qualunque cambiamento gli trasmettano, nella maggior parte dei casi senza nemmeno revisionare quelle modifiche. Alcuni di quei luogotenenti hanno accettato il ruolo di <quote>manutentori</quote> responsabili di specifici sottosistemi del kernel. Se un programmatore qualsiasi vuole che la propria modifica a un sottosistema del kernel finisca nell'albero di Linus, deve trovare il manutentore di quel sottosistema e chiedergli di accettarla. Se il manutentore revisiona le modifiche e accetta di prenderle, le passerà a Linus al momento giusto.</para>
   1.115 +
   1.116 +      <para id="x_471">Ogni singolo luogotenente ha il proprio approccio per revisionare, accettare e pubblicare le modifiche, e per decidere quando passarle a Linus. In più, esistono diversi rami ben noti che vengono usati per scopi differenti. Per esempio, alcune persone mantengono repository <quote>stabili</quote> di vecchie versioni del kernel alle quali applicano correzioni critiche quando è necessario. Alcuni manutentori pubblicano molteplici alberi: uno per modifiche sperimentali, uno per cambiamenti che stanno per passare in alto, e così via. Altri pubblicano semplicemente un singolo albero.</para>
   1.117  
   1.118        <para id="x_472">Questo modello ha due caratteristiche importanti. La prima è quella di essere <quote>a sola estrazione</quote>. Dovete chiedere, convincere, o implorare un altro sviluppatore di prendere una modifica da voi, perché non c'è quasi nessun albero a cui più di una persona possa trasmettere e non c'è modo di trasmettere cambiamenti a un albero controllato da qualcun altro.</para>
   1.119  
   1.120 -      <para id="x_473">La seconda è quella di essere basato su reputazione e approvazione. Se siete sconosciuti, Linus probabilmente ignorerà le vostre modifiche senza nemmeno rispondervi. Ma il manutentore di un sottosistema probabilmente le revisionerà e sarà disposto ad accettarle se rispettano i suoi criteri di adeguatezza. Più modifiche <quote>buone</quote> contribuite a un manutentore, più è probabile che si fidi del vostro giudizio e accetti i vostri cambiamenti. Se siete ben conosciuti e mantenete un ramo di lunga data per qualcosa che Linus non ha ancora accettato, le persone con interessi simili potranno incorporare regolarmente i vostri cambiamenti per rimanere aggiornati sul vostro lavoro.</para>
   1.121 -
   1.122 -      <para id="x_474">Reputazione e approvazione non necessariamente oltrepassano i confini tecnici e sociali di un sottosistema. Se siete un programmatore rispettato ma specializzato nell'ambito della memorizzazione dei dati e provate a correggere un bug relativo all'infrastruttura di rete, un manutentore del sottosistema esaminerà minuziosamente quel cambiamento come se fosse stato realizzato da un completo sconosciuto.</para>
   1.123 -
   1.124 -      <para id="x_475">Alle persone che provengono da esperienze con progetti più ordinari, il processo di sviluppo relativamente caotico del kernel di Linux sembra spesso completamente folle: subisce i capricci dei singoli, le persone apportano radicali cambiamenti ogni volta che lo ritengono appropriato e la velocità di sviluppo è sorprendente. E però Linux è un software molto apprezzato e di grande successo.</para>
   1.125 +      <para id="x_473">La seconda è quella di essere basato su reputazione e approvazione. Se siete sconosciuti, Linus probabilmente ignorerà le vostre modifiche senza nemmeno rispondervi. Ma il manutentore di un sottosistema probabilmente le revisionerà e sarà disposto ad accettarle se rispettano i suoi criteri di qualità. Più modifiche <quote>buone</quote> contribuite a un manutentore, più è probabile che si fidi del vostro giudizio e accetti i vostri cambiamenti. Se siete ben conosciuti e mantenete un ramo di lunga data per qualcosa che Linus non ha ancora accettato, le persone con interessi simili potranno incorporare regolarmente i vostri cambiamenti per rimanere aggiornati sul vostro lavoro.</para>
   1.126 +
   1.127 +      <para id="x_474">Reputazione e approvazione non oltrepassano necessariamente i confini tecnici e sociali di un sottosistema. Se siete un programmatore rispettato ma specializzato nell'ambito della memorizzazione dei dati e provate a correggere un bug relativo all'infrastruttura di rete, un manutentore del sottosistema esaminerà minuziosamente quel cambiamento come se fosse stato realizzato da un completo sconosciuto.</para>
   1.128 +
   1.129 +      <para id="x_475">Alle persone che provengono da esperienze con progetti più ordinari, il processo di sviluppo relativamente caotico del kernel di Linux sembra spesso completamente folle: subisce i capricci dei singoli, le persone apportano radicali cambiamenti ogni volta che lo ritengono opportuno e la velocità di sviluppo è sorprendente. Nonostante questo, Linux è un software molto apprezzato e di grande successo.</para>
   1.130      </sect2>
   1.131  
   1.132      <sect2>
   1.133 @@ -180,7 +180,7 @@
   1.134    <sect1>
   1.135      <title>Il lato tecnico della condivisione</title>
   1.136  
   1.137 -    <para id="x_47a">Il resto di questo capitolo è dedicato alla condivisione dei cambiamenti con i vostri collaboratori.</para>
   1.138 +    <para id="x_47a">Il resto di questo capitolo è dedicato alle questioni tecniche relative alla condivisione dei cambiamenti con i vostri collaboratori.</para>
   1.139    </sect1>
   1.140  
   1.141    <sect1 id="sec:collab:serve">
   1.142 @@ -188,7 +188,7 @@
   1.143  
   1.144      <para id="x_47b">Il comando <command role="hg-cmd">hg serve</command> di Mercurial è meravigliosamente adatto per situazioni in cui i gruppi di sviluppo sono piccoli, localizzati e veloci. Rappresenta anche un modo fantastico per familiarizzare con l'uso dei comandi Mercurial attraverso la rete.</para>
   1.145  
   1.146 -    <para id="x_47c">Eseguite <command role="hg-cmd">hg serve</command> all'interno di un repository e in meno di un secondo verrà attivato un server HTTP specializzato che accetterà connessioni da qualunque client e servirà i dati di quel repository fino a quando non lo spegnerete. Chiunque conosca l'URL del server che avete appena attivato e sia in grado di accedere al vostro computer attraverso la rete potrà usare un browser web o lo stesso Mercurial per leggere i dati da quel repository. Un URL corrispondente a un'istanza di <command role="hg-cmd">hg serve</command> in esecuzione su un computer portatile somiglierà probabilmente a qualcosa come <literal>http://mio-portatile.local:8000/</literal>.</para>
   1.147 +    <para id="x_47c">Invocate <command role="hg-cmd">hg serve</command> all'interno di un repository e in meno di un secondo verrà avviato un server HTTP specializzato che accetterà connessioni da qualunque client e servirà i dati di quel repository fino a quando non lo spegnerete. Chiunque conosca l'URL del server che avete appena avviato e sia in grado di accedere al vostro computer attraverso la rete potrà usare un browser web o lo stesso Mercurial per leggere i dati da quel repository. Un URL corrispondente a un'istanza di <command role="hg-cmd">hg serve</command> in esecuzione su un computer portatile somiglierà probabilmente a qualcosa come <literal>http://mio-portatile.local:8000/</literal>.</para>
   1.148  
   1.149      <para id="x_47d">Il comando <command role="hg-cmd">hg serve</command> non è un server web di uso generale, ma può fare solo due cose:</para>
   1.150      <itemizedlist>
   1.151 @@ -198,14 +198,14 @@
   1.152        </listitem></itemizedlist>
   1.153      <para id="x_480">In particolare, <command role="hg-cmd">hg serve</command> non permetterà agli utenti di <emphasis>modificare</emphasis> il vostro repository, perché è stato pensato per un uso in sola lettura.</para>
   1.154  
   1.155 -    <para id="x_481">Se avete appena cominciato a lavorare con Mercurial, non c'è nulla che vi impedisca di usare <command role="hg-cmd">hg serve</command> per servire i dati di un repository sul vostro computer, poi usare comandi come <command role="hg-cmd">hg clone</command>, <command role="hg-cmd">hg incoming</command> e così via per comunicare con quel server come se il repository fosse situato su una macchina remota. Questo può aiutarvi a familiarizzare velocemente con l'utilizzo dei comandi su repository ospitati in rete.</para>
   1.156 +    <para id="x_481">Se avete appena cominciato a lavorare con Mercurial, non c'è nulla che vi impedisca di usare <command role="hg-cmd">hg serve</command> per servire i dati di un repository sul vostro computer, poi usare comandi come <command role="hg-cmd">hg clone</command>, <command role="hg-cmd">hg incoming</command>, e così via per comunicare con quel server come se il repository fosse situato su una macchina remota. Questo può aiutarvi a familiarizzare velocemente con l'utilizzo dei comandi su repository ospitati in rete.</para>
   1.157  
   1.158      <sect2>
   1.159        <title>Alcune cose da tenere a mente</title>
   1.160  
   1.161 -      <para id="x_482">Dato che fornisce un accesso non autenticato in lettura a tutti i client, dovreste usare <command role="hg-cmd">hg serve</command> solo in un ambiente in cui non vi interessa, o potete interamente controllare su, chi può accedere alla vostra rete ed estrarre dati dal vostro repository.</para>
   1.162 -
   1.163 -      <para id="x_483">Il comando <command role="hg-cmd">hg serve</command> non sa nulla del firewall che potreste avere installato a protezione del vostro sistema o della vostra rete. Non è in grado di scoprire se avete un firewall né di controllarlo. Se altre persone non riescono ad accedere a un'istanza di <command role="hg-cmd">hg serve</command> in esecuzione, la seconda cosa che dovreste fare (<emphasis>dopo</emphasis> aver verificato che stiano usando l'URL corretto) è controllare la configurazione del vostro firewall.</para>
   1.164 +      <para id="x_482">Dato che <command role="hg-cmd">hg serve</command> fornisce un accesso non autenticato in lettura a tutti i client, dovreste usarlo solo in un ambiente in cui non vi interessa, o potete interamente controllare, chi può accedere alla vostra rete ed estrarre dati dal vostro repository.</para>
   1.165 +
   1.166 +      <para id="x_483">Il comando <command role="hg-cmd">hg serve</command> non sa nulla del firewall che potreste avere installato a protezione del vostro sistema o della vostra rete: non è in grado di scoprire se avete un firewall né di controllarlo. Se altre persone non riescono ad accedere a un'istanza di <command role="hg-cmd">hg serve</command> in esecuzione, la seconda cosa che dovreste fare (<emphasis>dopo</emphasis> aver verificato che stiano usando l'URL corretto) è controllare la configurazione del vostro firewall.</para>
   1.167  
   1.168        <para id="x_484">Di default, <command role="hg-cmd">hg serve</command> accetta connessioni in entrata sulla porta 8000. Se un altro processo sta già occupando la porta che volete usare, potete specificare una porta differente tramite l'opzione <option role="hg-opt-serve">-p</option>.</para>
   1.169  
   1.170 @@ -220,17 +220,17 @@
   1.171  
   1.172      <para id="x_487">Se non avete familiarità con ssh, sappiate che è il nome di un comando e di un protocollo di rete che vi permette di comunicare in sicurezza con un altro computer. Per usarlo con Mercurial, dovrete impostare uno o più account utente su un server in maniera che gli utenti remoti possano entrare ed eseguire comandi.</para>
   1.173  
   1.174 -    <para id="x_488">(Se <emphasis>avete</emphasis> familiarità con ssh, probabilmente troverete rudimentale la natura di parte del materiale che segue.)</para>
   1.175 +    <para id="x_488">(Se <emphasis>avete</emphasis> familiarità con ssh, probabilmente una parte del materiale che segue vi sembrerà elementare.)</para>
   1.176  
   1.177      <sect2>
   1.178        <title>Come leggere e scrivere URL ssh</title>
   1.179  
   1.180        <para id="x_489">Un URL ssh tende ad avere la forma seguente:</para>
   1.181 -      <programlisting>ssh://bos@hg.serpentine.com:22/hg/hgbook</programlisting>
   1.182 +      <programlisting>ssh://bos@hg.serpentine.com:22/hg/libro</programlisting>
   1.183        <orderedlist>
   1.184  	<listitem><para id="x_48a">La parte <quote><literal>ssh://</literal></quote> dice a Mercurial di usare il protocollo ssh.</para>
   1.185  	</listitem>
   1.186 -	<listitem><para id="x_48b">Il componente <quote><literal>bos@</literal></quote> indica qual è il nome utente con cui accedere al server. Potete ometterlo se il nome utente remoto è lo stesso del vostro nome utente locale.</para>
   1.187 +	<listitem><para id="x_48b">Il componente <quote><literal>bos@</literal></quote> indica qual è il nome utente con cui accedere al server. Potete ometterlo se il nome utente remoto è uguale al vostro nome utente locale.</para>
   1.188  	</listitem>
   1.189  	<listitem><para id="x_48c"><quote><literal>hg.serpentine.com</literal></quote> rappresenta il nome del server a cui accedere.</para>
   1.190  	</listitem>
   1.191 @@ -255,7 +255,7 @@
   1.192  
   1.193        <para id="x_493">Quasi tutti i sistemi di tipo Unix includono un'installazione di OpenSSH. Se state usando uno di questi sistemi, eseguite <literal>which ssh</literal> per scoprire se il comando <command>ssh</command> è installato (di solito si trova nella directory <filename class="directory">/usr/bin</filename>). Nell'improbabile eventualità in cui non sia presente, date un'occhiata alla documentazione del vostro sistema per capire come installarlo.</para>
   1.194  
   1.195 -      <para id="x_494">Sotto Windows, il pacchetto TortoiseHg comprende una versione dell'eccellente comando <command>plink</command>, realizzato da Simon Tatham, che non dovrebbe avere bisogno di ulteriori configurazioni.</para>
   1.196 +      <para id="x_494">Su Windows, il pacchetto TortoiseHg comprende una versione dell'eccellente comando <command>plink</command>, realizzato da Simon Tatham, che non dovrebbe avere bisogno di ulteriori configurazioni.</para>
   1.197      </sect2>
   1.198  
   1.199      <sect2>
   1.200 @@ -274,7 +274,7 @@
   1.201  	  <para id="x_6a5">Su un sistema di tipo Unix, il comando <command>ssh-keygen</command> dovrebbe servire allo scopo.</para>
   1.202      </listitem>
   1.203      <listitem>
   1.204 -	  <para id="x_6a6">Per generare una coppia di chiavi sotto Windows, se state usando TortoiseHg potreste dover scaricare il comando <command>puttygen</command> dal <ulink url="http://www.chiark.greenend.org.uk/~sgtatham/putty">sito web di PuTTY</ulink>. Leggete la <ulink url="http://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter8.html#pubkey-puttygen">documentazione di <command>puttygen</command></ulink> per i dettagli su come usare il comando.</para>
   1.205 +	  <para id="x_6a6">Per generare una coppia di chiavi su Windows, se state usando TortoiseHg potreste dover scaricare il comando <command>puttygen</command> dal <ulink url="http://www.chiark.greenend.org.uk/~sgtatham/putty">sito web di PuTTY</ulink>. Leggete la <ulink url="http://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter8.html#pubkey-puttygen">documentazione di <command>puttygen</command></ulink> per i dettagli su come usare il comando.</para>
   1.206  	</listitem>
   1.207        </itemizedlist>
   1.208  
   1.209 @@ -282,7 +282,7 @@
   1.210  
   1.211        <para id="x_49b">In ogni caso, generare semplicemente la coppia di chiavi non basta, ma dovrete aggiungere la chiave pubblica all'insieme di chiavi autorizzate che appartiene a qualsiasi utente vogliate utilizzare per accedere al server remoto. Per i server che usano OpenSSH (la grande maggioranza), questo significa aggiungere la chiave pubblica a una lista contenuta in un file chiamato <filename role="special">authorized_keys</filename> nella directory <filename role="special" class="directory">.ssh</filename> dell'utente.</para>
   1.212  
   1.213 -      <para id="x_49c">Su un sistema di tipo Unix, la vostra chiave pubblica avrà una estensione <filename>.pub</filename>. Se state usando <command>puttygen</command> sotto Windows, potete salvare la chiave pubblica in un file di vostra scelta, o copiarla dalla finestra in cui è visualizzata e incollarla direttamente nel file <filename role="special">authorized_keys</filename>.</para>
   1.214 +      <para id="x_49c">Su un sistema di tipo Unix, la vostra chiave pubblica avrà una estensione <filename>.pub</filename>. Se state usando <command>puttygen</command> su Windows, potete salvare la chiave pubblica in un file di vostra scelta, o copiarla dalla finestra in cui è visualizzata e incollarla direttamente nel file <filename role="special">authorized_keys</filename>.</para>
   1.215      </sect2>
   1.216      <sect2>
   1.217        <title>Usare un agente di autenticazione</title>
   1.218 @@ -296,7 +296,7 @@
   1.219  	  <para id="x_49f">Su sistemi di tipo Unix, l'agente è chiamato <command>ssh-agent</command> e spesso viene eseguito automaticamente quando entrate nel sistema. Dovrete usare il comando <command>ssh-add</command> per aggiungere una nuova passphrase alla memoria dell'agente.</para>
   1.220  	</listitem>
   1.221  	<listitem>
   1.222 -	  <para id="x_6a7">Sotto Windows, se state usando TortoiseHg, il comando <command>pageant</command> funziona come un agente. Come con <command>puttygen</command>, avrete bisogno di <ulink url="http://www.chiark.greenend.org.uk/%7Esgtatham/putty/download.html">scaricare <command>pageant</command></ulink> dal sito web di PuTTY e di leggere <ulink url="http://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter9.html#pageant">la sua documentazione</ulink>. Il comando <command>pageant</command> aggiunge alla vostra area di notifica un'icona che vi permetterà di gestire le passphrase memorizzate.</para>
   1.223 +	  <para id="x_6a7">Su Windows, se state usando TortoiseHg, il comando <command>pageant</command> funziona come un agente. Come con <command>puttygen</command>, avrete bisogno di <ulink url="http://www.chiark.greenend.org.uk/%7Esgtatham/putty/download.html">scaricare <command>pageant</command></ulink> dal sito web di PuTTY e di leggere <ulink url="http://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter9.html#pageant">la sua documentazione</ulink>. Il comando <command>pageant</command> aggiunge alla vostra area di notifica un'icona che vi permetterà di gestire le passphrase memorizzate.</para>
   1.224  	</listitem>
   1.225        </itemizedlist>
   1.226      </sect2>
   1.227 @@ -351,7 +351,7 @@
   1.228  	<listitem><para id="x_4b4">La variabile d'ambiente <envar>PYTHONPATH</envar> potrebbe aver bisogno di contenere il percorso ai moduli Python di Mercurial. Potrebbe non essere per niente impostata, potrebbe essere sbagliata, o potrebbe venire impostata solo se l'accesso è interattivo.</para>
   1.229  	</listitem></itemizedlist>
   1.230  
   1.231 -      <para id="x_4b5">Se riuscite a eseguire <command role="hg-cmd">hg version</command> attraverso una connessione ssh, ben fatto! Siete riusciti a configurare il client e il server. Ora dovreste essere in grado di usare Mercurial per accedere ai repository ospitato da quel nome utente su quel server. Se a questo punto incontrate qualche problema con Mercurial e ssh, provate a usare l'opzione <option role="hg-opt-global">--debug</option> per avere una immagine più chiara di quello che sta succedendo.</para>
   1.232 +      <para id="x_4b5">Se riuscite a eseguire <command role="hg-cmd">hg version</command> attraverso una connessione ssh, ben fatto! Siete riusciti a configurare il client e il server. Ora dovreste essere in grado di usare Mercurial per accedere ai repository ospitato da quel nome utente su quel server. Se a questo punto incontrate qualche problema con Mercurial e ssh, provate a usare l'opzione <option role="hg-opt-global">--debug</option> per avere un'immagine più chiara di quello che sta succedendo.</para>
   1.233      </sect2>
   1.234      <sect2>
   1.235        <title>Usare la compressione con ssh</title>
   1.236 @@ -379,7 +379,7 @@
   1.237  
   1.238      <para id="x_6a8">Il modo più semplice per condividere uno o più repository in modo permanente è quello di usare un server web e il supporto CGI di Mercurial.</para>
   1.239  
   1.240 -    <para id="x_4bb">A seconda di quanto siete ambiziosi, configurare l'interfaccia CGI di Mercurial può portarvi via da pochi momenti a diverse ore.</para>
   1.241 +    <para id="x_4bb">A seconda di quanto siete ambiziosi, configurare l'interfaccia CGI di Mercurial può portarvi via da pochi minuti a diverse ore.</para>
   1.242  
   1.243      <para id="x_4bc">Cominceremo con il più semplice degli esempi per poi farci strada verso una configurazione più complessa. Persino nel caso più semplice, quasi certamente finirete per avere bisogno di leggere e modificare la configurazione del vostro server web.</para>
   1.244  
   1.245 @@ -399,18 +399,18 @@
   1.246        <orderedlist>
   1.247  	<listitem><para id="x_4bf">Avete un server web installato? Mac OS X e alcune distribuzioni Linux includono Apache, ma molti altri sistemi potrebbero non avere un server web già installato.</para>
   1.248  	</listitem>
   1.249 -	<listitem><para id="x_4c0">Se avete un server web installato, è davvero in esecuzione? Sulla maggior parte dei sistemi, se anche un server web è presente, sarà disabilitato per default.</para>
   1.250 +	<listitem><para id="x_4c0">Se avete un server web installato, è davvero in esecuzione? Sulla maggior parte dei sistemi, anche se un server web è presente, sarà disabilitato per default.</para>
   1.251  	</listitem>
   1.252  	<listitem><para id="x_4c1">Il vostro server è configurato per consentirvi di eseguire programmi CGI nella directory dove pianificate di farlo? La maggior parte delle impostazioni di partenza dei server disabilitano esplicitamente la possibilità di eseguire programmi CGI.</para>
   1.253  	</listitem></orderedlist>
   1.254  
   1.255 -      <para id="x_4c2">Se non avete un server web installato e non avete una sostanziale esperienza nel configurare Apache, dovreste considerare l'uso del server web <literal>lighttpd</literal> invece di Apache. Le configurazioni di Apache hanno la reputazione ben meritata di essere barocche e confuse. Mentre Apache è dotato di maggiori funzionalità rispetto a <literal>lighttpd</literal>, buona parte di queste funzionalità non è rilevante per servire repository Mercurial. E <literal>lighttpd</literal> è innegabilmente <emphasis>molto</emphasis> più facile da approcciare di Apache.</para>
   1.256 +      <para id="x_4c2">Se non avete un server web installato e non avete una considerevole esperienza nel configurare Apache, dovreste considerare l'uso del server web <literal>lighttpd</literal> invece di Apache. Le configurazioni di Apache hanno la reputazione ben meritata di essere barocche e confuse. Mentre Apache è dotato di un numero maggiore di funzioni rispetto a <literal>lighttpd</literal>, buona parte di queste funzioni non è rilevante per servire repository Mercurial. E <literal>lighttpd</literal> è innegabilmente <emphasis>molto</emphasis> più facile da approcciare di Apache.</para>
   1.257      </sect2>
   1.258  
   1.259      <sect2>
   1.260        <title>Configurazione CGI di base</title>
   1.261  
   1.262 -      <para id="x_4c3">Su sistemi di tipo Unix, di solito gli utenti hanno una sottodirectory con un nome simile a <filename class="directory">public_html</filename> nella propria directory personale, da cui possono servire pagine web. Un file chiamato <filename>foo</filename> in questa directory sarà accessibile tramite un URL della forma <literal>http://www.example.com/~nomeutente/foo</literal>.</para>
   1.263 +      <para id="x_4c3">Su sistemi di tipo Unix, di solito gli utenti hanno una sottodirectory con un nome simile a <filename class="directory">public_html</filename> nella propria directory personale da cui possono servire pagine web. Un file chiamato <filename>foo</filename> in questa directory sarà accessibile tramite un URL della forma <literal>http://www.example.com/~nomeutente/foo</literal>.</para>
   1.264  
   1.265        <para id="x_4c4">Per cominciare, prendete lo script <filename role="special">hgweb.cgi</filename> che dovrebbe essere presente nella vostra installazione di Mercurial. Se non riuscite a trovarne velocemente una copia sul vostro sistema, scaricatela da uno dei principali repository di Mercurial all'indirizzo <ulink url="http://www.selenic.com/repo/hg/raw-file/tip/hgweb.cgi">http://www.selenic.com/repo/hg/raw-file/tip/hgweb.cgi</ulink>.</para>
   1.266  
   1.267 @@ -423,7 +423,7 @@
   1.268        <sect3 id="sec:collab:wtf">
   1.269  	<title>Che cosa <emphasis>potrebbe</emphasis> andare storto?</title>
   1.270  
   1.271 -	<para id="x_4c7">Una volta che avete copiato lo script CGI al suo posto, aprite un browser web e provate a visitare l'URL <literal>http://nomemacchina/~nomeutente/hgweb.cgi</literal>, <emphasis>ma</emphasis> raccogliete le forze per affrontare un fallimento immediato. C'è un'alta probabilità che la visita a questo URL fallisca e ci sono molte possibili ragioni per questo. In effetti, probabilmente vi imbatterete in quasi tutti i possibili errori descritti più avanti, quindi leggete attentamente. Quelli che seguono sono tutti i problemi che ho incontrato su un sistema che esegue Fedora 7, con un'installazione vergine di Apache e un account utente che ho creato espressamente per effettuare questo esercizio.</para>
   1.272 +	<para id="x_4c7">Una volta che avete copiato lo script CGI al suo posto, aprite un browser web e provate a visitare l'URL <literal>http://nomemacchina/~nomeutente/hgweb.cgi</literal>, <emphasis>ma</emphasis> raccogliete le forze per affrontare un fallimento immediato. C'è un'alta probabilità che la visita a questo URL fallisca e ci sono molte possibili ragioni per questo. In effetti, probabilmente vi imbatterete in quasi tutti i possibili errori descritti più avanti, quindi leggete attentamente. Quelli che seguono sono tutti i problemi che ho incontrato sul sistema operativo Fedora 7, con un'installazione vergine di Apache e un account utente che ho creato espressamente per effettuare questo esercizio.</para>
   1.273  
   1.274  	<para id="x_4c8">Il vostro server web potrebbe aver disabilitato le directory di pubblicazione per utente. Se state usando Apache, cercate la direttiva <literal>UserDir</literal> nel vostro file di configurazione. Se non è presente, o se è presente ma il suo valore è <literal>disabled</literal>, allora le directory per utente sono disabilitate. Altrimenti, la stringa che segue <literal>UserDir</literal> è il nome della sottodirectory della vostra directory personale che verrà letta da Apache, per esempio <filename class="directory">public_html</filename>.</para>
   1.275  
   1.276 @@ -443,7 +443,7 @@
   1.277  	<para id="x_4cd">Se vedete che Apache vi restituisce il testo dello script CGI invece di eseguirlo, potreste dover attivare (se è già presente) o aggiungere una direttiva come questa.</para>
   1.278  	<programlisting>AddHandler cgi-script .cgi</programlisting>
   1.279  
   1.280 -	<para id="x_4ce">Può anche capitare che vi venga restituita una traccia colorata dello stack di esecuzione di Python dove l'interprete afferma di non poter importare un modulo relativo a <literal>mercurial</literal>. Questo è un concreto passo in avanti! Il server ora è in grado di eseguire il vostro script CGI. Questo errore può accadere soltanto se state eseguendo un'installazione privata di Mercurial invece di un'installazione di sistema. Ricordate che il server web esegue il programma CGI senza alcuna variabile di ambiente che date per scontata in una sessione interattiva. Se vi capita questo errore, aprite la vostra copia di <filename role="special">hgweb.cgi</filename> e seguite le indicazioni che trovate per impostare correttamente la vostra variabile d'ambiente <envar>PYTHONPATH</envar>.</para>
   1.281 +	<para id="x_4ce">Può anche capitare che vi venga restituita una traccia colorata dello stack di esecuzione di Python dove l'interprete afferma di non poter importare un modulo relativo a <literal>mercurial</literal>. Questo è un concreto passo in avanti! Il server ora è in grado di eseguire il vostro script CGI. Questo errore può accadere soltanto se state eseguendo un'installazione privata di Mercurial invece di un'installazione di sistema. Ricordate che il server web esegue il programma CGI senza alcuna variabile d'ambiente che date per scontata in una sessione interattiva. Se vi capita questo errore, aprite la vostra copia di <filename role="special">hgweb.cgi</filename> e seguite le indicazioni che trovate per impostare correttamente la vostra variabile d'ambiente <envar>PYTHONPATH</envar>.</para>
   1.282  
   1.283  	<para id="x_4cf">Infine, otterrete <emphasis>sicuramente</emphasis> un'altra traccia colorata dello stack di esecuzione di Python: questa volta l'interprete si lamenterà di non poter trovare <filename class="directory">/path/to/repository</filename>. Modificate il vostro script <filename role="special">hgweb.cgi</filename> per sostituire la stringa <filename class="directory">/path/to/repository</filename> con il percorso completo del repository che volete condividere.</para>
   1.284  
   1.285 @@ -465,7 +465,7 @@
   1.286      <sect2>
   1.287        <title>Condividere più repository con un solo script CGI</title>
   1.288  
   1.289 -      <para id="x_4d4">Lo script <filename role="special">hgweb.cgi</filename> ha una fastidiosa restrizione che vi permette solo di pubblicare un singolo repository. Se volete pubblicarne più di uno senza complicarvi la vita con molteplici copie dello stesso script, ognuna con un nome differente, la scelta migliore è quella di usare lo script <filename role="special">hgwebdir.cgi</filename>.</para>
   1.290 +      <para id="x_4d4">Lo script <filename role="special">hgweb.cgi</filename> ha una fastidiosa restrizione che vi permette solo di pubblicare un singolo repository. Se volete pubblicarne più di uno senza complicarvi la vita con molteplici copie dello stesso script, ognuna con un nome diverso, la scelta migliore è quella di usare lo script <filename role="special">hgwebdir.cgi</filename>.</para>
   1.291  
   1.292        <para id="x_4d5">La procedura per configurare <filename role="special">hgwebdir.cgi</filename> è solo leggermente più complicata di quella per <filename role="special">hgweb.cgi</filename>. Per prima cosa, dovete ottenere una copia dello script. Se non ne avete una sottomano, potete scaricala dal repository principale di Mercurial all'indirizzo <ulink url="http://www.selenic.com/repo/hg/raw-file/tip/hgwebdir.cgi">http://www.selenic.com/repo/hg/raw-file/tip/hgwebdir.cgi</ulink>.</para>
   1.293  
   1.294 @@ -520,9 +520,9 @@
   1.295      <sect2>
   1.296        <title>Le opzioni di configurazione web</title>
   1.297  
   1.298 -      <para id="x_4e5">Le interfacce web di Mercurial (il comando <command role="hg-cmd">hg serve</command> e gli script <filename role="special">hgweb.cgi</filename> e <filename role="special">hgwebdir.cgi</filename>) hanno un certo numero di opzioni di configurazione che potete impostare. Queste appartengono a una sezione chiamata <literal role="rc-web">web</literal>.</para>
   1.299 +      <para id="x_4e5">Le interfacce web di Mercurial (il comando <command role="hg-cmd">hg serve</command> e gli script <filename role="special">hgweb.cgi</filename> e <filename role="special">hgwebdir.cgi</filename>) hanno un certo numero di opzioni di configurazione che potete impostare. Queste opzioni appartengono a una sezione chiamata <literal role="rc-web">web</literal>.</para>
   1.300        <itemizedlist>
   1.301 -	<listitem><para id="x_4e6"><envar role="rc-item-web">allow_archive</envar>: Determina qual è (e se c'è) il meccanismo di scaricamento che viene supportato da Mercurial. Se abilitate questa funzionalità, gli utenti dell'interfaccia web saranno in grado di scaricare un archivio di qualsiasi revisione stiano visitando nel repository. Per abilitare la funzionalità di archivio, questo elemento deve prendere la forma di una sequenza di parole scelte dalla lista seguente.</para>
   1.302 +	<listitem><para id="x_4e6"><envar role="rc-item-web">allow_archive</envar>: Determina qual è (e se c'è) il meccanismo di scaricamento che viene supportato da Mercurial. Se abilitate questa funzione, gli utenti dell'interfaccia web saranno in grado di scaricare un archivio di qualsiasi revisione stiano visitando nel repository. Per abilitare la funzione di archivio, questo elemento deve prendere la forma di una sequenza di parole scelte dalla lista seguente.</para>
   1.303  	  <itemizedlist>
   1.304  	    <listitem><para id="x_4e7"><literal>bz2</literal>: un archivio <command>tar</command>, compresso usando la compressione <literal>bzip2</literal>. Questo formato ha il miglior rapporto di compressione, ma usa più tempo di CPU sul server.</para>
   1.305  	    </listitem>
   1.306 @@ -531,11 +531,11 @@
   1.307  	    <listitem><para id="x_4e9"><literal>zip</literal>: un archivio <command>zip</command>, compresso usando la compressione LZW. Questo formato ha il peggior rapporto di compressione, ma è largamente usato nel mondo Windows.</para>
   1.308  	    </listitem>
   1.309  	  </itemizedlist>
   1.310 -	  <para id="x_4ea">Se fornite una lista vuota o se non avete una voce <envar role="rc-item-web">allow_archive</envar>, questa funzionalità sarà disabilitata. Ecco un esempio di come abilitare tutti e tre i formati supportati.</para>
   1.311 +	  <para id="x_4ea">Se fornite una lista vuota o se non avete una voce <envar role="rc-item-web">allow_archive</envar>, questa funzione sarà disabilitata. Ecco un esempio di come abilitare tutti e tre i formati supportati.</para>
   1.312  	  <programlisting>[web]
   1.313  allow_archive = bz2 gz zip</programlisting>
   1.314  	</listitem>
   1.315 -	<listitem><para id="x_4eb"><envar role="rc-item-web">allowpull</envar>: booleano. Determina se l'interfaccia web permette agli utenti remoti di usare i comandi <command role="hg-cmd">hg pull</command> e <command role="hg-cmd">hg clone</command> su questo repository via HTTP. Se impostato a <literal>no</literal> o a <literal>false</literal>, solo la parte <quote>dedicata agli umani</quote> dell'interfaccia web sarà disponibile.</para>
   1.316 +	<listitem><para id="x_4eb"><envar role="rc-item-web">allowpull</envar>: booleano. Determina se l'interfaccia web permette agli utenti remoti di usare i comandi <command role="hg-cmd">hg pull</command> e <command role="hg-cmd">hg clone</command> su questo repository via HTTP. Se impostato a <literal>no</literal> o a <literal>false</literal>, solo la parte <quote>orientata agli umani</quote> dell'interfaccia web sarà disponibile.</para>
   1.317  	</listitem>
   1.318  	<listitem><para id="x_4ec"><envar role="rc-item-web">contact</envar>: stringa. Una stringa di testo libero (ma preferibilmente breve) che identifica la persona o il gruppo responsabile del repository. Questa stringa contiene spesso il nome e l'indirizzo email di una persona o di una mailing list. Spesso ha senso inserire questa voce nel file <filename role="special">.hg/hgrc</filename> del singolo repository, ma può anche avere senso utilizzarla in un file <filename role="special">~/.hgrc</filename> globale se tutti i repository hanno un singolo manutentore.</para>
   1.319  	</listitem>
   1.320 @@ -587,11 +587,11 @@
   1.321  
   1.322  	<para id="x_4f6">Alcuni degli elementi nella sezione <literal role="rc-web">web</literal> di un file <filename role="special">~/.hgrc</filename> possono essere usati solo con il comando <command role="hg-cmd">hg serve</command>.</para>
   1.323  	<itemizedlist>
   1.324 -	  <listitem><para id="x_4f7"><envar role="rc-item-web">accesslog</envar>: percorso. Il nome di un file in cui scrivere un registro degli accessi. Normalmente, il comando <command role="hg-cmd">hg serve</command> scrive queste informazioni sul canale di uscita predefinito, non su un file. Le voci del registro vengono scritte nel formato <quote>combined</quote> che è uno standard usato da quasi tutti i server web.</para>
   1.325 +	  <listitem><para id="x_4f7"><envar role="rc-item-web">accesslog</envar>: percorso. Il nome di un file in cui tenere un registro degli accessi. Normalmente, il comando <command role="hg-cmd">hg serve</command> scrive queste informazioni sul canale di uscita predefinito, non su un file. Le voci del registro vengono scritte nel formato <quote>combined</quote> che è uno standard usato da quasi tutti i server web.</para>
   1.326  	  </listitem>
   1.327  	  <listitem><para id="x_4f8"><envar role="rc-item-web">address</envar>: stringa. L'indirizzo locale su cui il server dovrebbe essere in ascolto per le connessioni in entrata. Di default, il server è in ascolto su tutti gli indirizzi.</para>
   1.328  	  </listitem>
   1.329 -	  <listitem><para id="x_4f9"><envar role="rc-item-web">errorlog</envar>: percorso. Il nome di un file in cui scrivere un registro degli errori. Normalmente, il comando <command role="hg-cmd">hg serve</command> scrive queste informazioni sul canale di uscita predefinito, non su un file.</para>
   1.330 +	  <listitem><para id="x_4f9"><envar role="rc-item-web">errorlog</envar>: percorso. Il nome di un file in cui tenere un registro degli errori. Normalmente, il comando <command role="hg-cmd">hg serve</command> scrive queste informazioni sul canale di uscita predefinito, non su un file.</para>
   1.331  	  </listitem>
   1.332  	  <listitem><para id="x_4fa"><envar role="rc-item-web">ipv6</envar>: booleano. Indica se usare il protocollo IPv6. Di default, IPv6 non viene usato.</para>
   1.333  	  </listitem>
   1.334 @@ -602,9 +602,9 @@
   1.335        <sect3>
   1.336  	<title>Scegliere il giusto file <filename role="special">~/.hgrc</filename> a cui aggiungere elementi della sezione <literal role="rc-web">web</literal></title>
   1.337  
   1.338 -	<para id="x_4fc">&Egrave; importante ricordare che un server web come Apache o <literal>lighttpd</literal> sarà in esecuzione sotto un identificatore di utente diverso dal vostro. Anche gli script CGI eseguiti dal vostro server, come <filename role="special">hgweb.cgi</filename>, verranno solitamente eseguiti sotto quell'identificatore.</para>
   1.339 -
   1.340 -	<para id="x_4fd">Se aggiungete elementi della sezione <literal role="rc-web">web</literal> al vostro file <filename role="special">~/.hgrc</filename> personale, gli script CGI non potranno leggere quel file <filename role="special">~/.hgrc</filename>. Quelle impostazioni quindi avranno effetto solo sul comportamento del comando <command role="hg-cmd">hg serve</command> quando sarete voi a eseguirlo. Per fare in modo che gli script CGI vedano le vostre impostazioni, create un file <filename role="special">~/.hgrc</filename> nella directory personale dell'utente il cui identificatore viene usato per eseguire il vostro server web, oppure aggiungete quelle impostazioni a un file <filename role="special">hgrc</filename> di sistema.</para>
   1.341 +	<para id="x_4fc">&Egrave; importante ricordare che un server web come Apache o <literal>lighttpd</literal> sarà in esecuzione sotto l'identità di un utente diverso dal vostro. Anche gli script CGI eseguiti dal vostro server, come <filename role="special">hgweb.cgi</filename>, verranno solitamente eseguiti sotto quell'identità.</para>
   1.342 +
   1.343 +	<para id="x_4fd">Se aggiungete elementi della sezione <literal role="rc-web">web</literal> al vostro file <filename role="special">~/.hgrc</filename> personale, gli script CGI non potranno leggere quel file <filename role="special">~/.hgrc</filename>. Quelle impostazioni quindi avranno effetto solo sul comportamento del comando <command role="hg-cmd">hg serve</command> quando sarete voi a eseguirlo. Per fare in modo che gli script CGI vedano le vostre impostazioni, create un file <filename role="special">~/.hgrc</filename> nella directory personale dell'utente la cui identità viene usata per eseguire il vostro server web, oppure aggiungete quelle impostazioni a un file <filename role="special">hgrc</filename> di sistema.</para>
   1.344        </sect3>
   1.345      </sect2>
   1.346    </sect1>
     2.1 --- a/it/examples/auto-snippets.xml	Thu Aug 13 18:57:50 2009 +0200
     2.2 +++ b/it/examples/auto-snippets.xml	Thu Aug 13 23:46:21 2009 +0200
     2.3 @@ -1,4 +1,4 @@
     2.4 -<!ENTITY ch06-apache-config.lst SYSTEM "results/ch06-apache-config.lst.lxo">
     2.5 +<!ENTITY ch06-apache-config.lst SYSTEM "ch06-apache-config.lst.it">
     2.6  <!ENTITY ch09-check_whitespace.py.lst SYSTEM "ch09-check_whitespace.py.lst.it">
     2.7  <!ENTITY ch10-bugzilla-config.lst SYSTEM "ch10-bugzilla-config.lst.it">
     2.8  <!ENTITY ch10-notify-config-mail.lst SYSTEM "ch10-notify-config-mail.lst.it">
     2.9 @@ -45,13 +45,13 @@
    2.10  <!ENTITY interaction.branch-repo.new SYSTEM "branch-repo.new.it">
    2.11  <!ENTITY interaction.branch-repo.pull SYSTEM "branch-repo.pull.it">
    2.12  <!ENTITY interaction.branch-repo.tag SYSTEM "branch-repo.tag.it">
    2.13 -<!ENTITY interaction.branching.clone SYSTEM "results/branching.clone.lxo">
    2.14 -<!ENTITY interaction.branching.init SYSTEM "results/branching.init.lxo">
    2.15 -<!ENTITY interaction.branching.main SYSTEM "results/branching.main.lxo">
    2.16 -<!ENTITY interaction.branching.merge SYSTEM "results/branching.merge.lxo">
    2.17 -<!ENTITY interaction.branching.stable SYSTEM "results/branching.stable.lxo">
    2.18 -<!ENTITY interaction.branching.tag SYSTEM "results/branching.tag.lxo">
    2.19 -<!ENTITY interaction.branching.update SYSTEM "results/branching.update.lxo">
    2.20 +<!ENTITY interaction.branching.clone SYSTEM "branching.clone.it">
    2.21 +<!ENTITY interaction.branching.init SYSTEM "branching.init.it">
    2.22 +<!ENTITY interaction.branching.main SYSTEM "branching.main.it">
    2.23 +<!ENTITY interaction.branching.merge SYSTEM "branching.merge.it">
    2.24 +<!ENTITY interaction.branching.stable SYSTEM "branching.stable.it">
    2.25 +<!ENTITY interaction.branching.tag SYSTEM "branching.tag.it">
    2.26 +<!ENTITY interaction.branching.update SYSTEM "branching.update.it">
    2.27  <!ENTITY interaction.ch01-new.add SYSTEM "ch01-new.add.it">
    2.28  <!ENTITY interaction.ch01-new.commit SYSTEM "ch01-new.commit.it">
    2.29  <!ENTITY interaction.ch01-new.init SYSTEM "ch01-new.init.it">
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/it/examples/branching.clone.it	Thu Aug 13 23:46:21 2009 +0200
     3.3 @@ -0,0 +1,12 @@
     3.4 +<!-- BEGIN branching.clone -->
     3.5 +<screen><prompt>$</prompt> <userinput>cd ..</userinput>
     3.6 +<prompt>$</prompt> <userinput>hg clone -rv1.0 principale stabile</userinput>
     3.7 +richiedo tutte le modifiche
     3.8 +aggiungo i changeset
     3.9 +aggiungo i manifest
    3.10 +aggiungo i cambiamenti ai file
    3.11 +aggiunti 1 changeset con 1 cambiamenti a 1 file
    3.12 +aggiorno la directory di lavoro
    3.13 +1 file aggiornati, 0 file uniti, 0 file rimossi, 0 file irrisolti
    3.14 +</screen>
    3.15 +<!-- END branching.clone -->
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/it/examples/branching.init.it	Thu Aug 13 23:46:21 2009 +0200
     4.3 @@ -0,0 +1,8 @@
     4.4 +<!-- BEGIN branching.init -->
     4.5 +<screen><prompt>$</prompt> <userinput>hg init principale</userinput>
     4.6 +<prompt>$</prompt> <userinput>cd principale</userinput>
     4.7 +<prompt>$</prompt> <userinput>echo 'Questa è una funzione noiosa.' &gt; miofile</userinput>
     4.8 +<prompt>$</prompt> <userinput>hg commit -A -m 'Abbiamo raggiunto una pietra miliare importante!'</userinput>
     4.9 +aggiungo miofile
    4.10 +</screen>
    4.11 +<!-- END branching.init -->
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/it/examples/branching.main.it	Thu Aug 13 23:46:21 2009 +0200
     5.3 @@ -0,0 +1,9 @@
     5.4 +<!-- BEGIN branching.main -->
     5.5 +<screen><prompt>$</prompt> <userinput>cd ../principale</userinput>
     5.6 +<prompt>$</prompt> <userinput>echo 'Questa è nuova ed eccitante!' &gt;&gt; miofile</userinput>
     5.7 +<prompt>$</prompt> <userinput>hg commit -m 'Aggiunge una nuova funzione.'</userinput>
     5.8 +<prompt>$</prompt> <userinput>cat miofile</userinput>
     5.9 +Questa è una funzione noiosa.
    5.10 +Questa è nuova ed eccitante!
    5.11 +</screen>
    5.12 +<!-- END branching.main -->
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/it/examples/branching.merge.it	Thu Aug 13 23:46:21 2009 +0200
     6.3 @@ -0,0 +1,20 @@
     6.4 +<!-- BEGIN branching.merge -->
     6.5 +<screen><prompt>$</prompt> <userinput>cd ../principale</userinput>
     6.6 +<prompt>$</prompt> <userinput>hg pull ../stabile</userinput>
     6.7 +estraggo da ../stabile
     6.8 +cerco i cambiamenti
     6.9 +aggiungo i changeset
    6.10 +aggiungo i manifest
    6.11 +aggiungo i cambiamenti ai file
    6.12 +aggiunti 1 changeset con 1 cambiamenti a 1 file (+1 teste)
    6.13 +(eseguite 'hg heads' per vedere le teste, 'hg merge' per unire)
    6.14 +<prompt>$</prompt> <userinput>hg merge</userinput>
    6.15 +unisco miofile
    6.16 +0 file aggiornati, 1 file uniti, 0 file rimossi, 0 file irrisolti
    6.17 +(unione tra rami, ricordatevi di eseguire il commit)
    6.18 +<prompt>$</prompt> <userinput>hg commit -m 'Incorpora la correzione del bug dal ramo stabile.'</userinput>
    6.19 +<prompt>$</prompt> <userinput>cat miofile</userinput>
    6.20 +Questa è una correzione a una funzione noiosa.
    6.21 +Questa è nuova ed eccitante!
    6.22 +</screen>
    6.23 +<!-- END branching.merge -->
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/it/examples/branching.stable.it	Thu Aug 13 23:46:21 2009 +0200
     7.3 @@ -0,0 +1,16 @@
     7.4 +<!-- BEGIN branching.stable -->
     7.5 +<screen><prompt>$</prompt> <userinput>hg clone stabile stabile-con-correzione</userinput>
     7.6 +aggiorno la directory di lavoro
     7.7 +1 file aggiornati, 0 file uniti, 0 file rimossi, 0 file irrisolti
     7.8 +<prompt>$</prompt> <userinput>cd stabile-con-correzione</userinput>
     7.9 +<prompt>$</prompt> <userinput>echo 'Questa è una correzione a una funzione noiosa.' &gt; miofile</userinput>
    7.10 +<prompt>$</prompt> <userinput>hg commit -m 'Corretto un bug'</userinput>
    7.11 +<prompt>$</prompt> <userinput>hg push</userinput>
    7.12 +trasmetto a /temp/stabile
    7.13 +cerco i cambiamenti
    7.14 +aggiungo i changeset
    7.15 +aggiungo i manifest
    7.16 +aggiungo i cambiamenti ai file
    7.17 +aggiunti 1 changeset con 1 cambiamenti a 1 file
    7.18 +</screen>
    7.19 +<!-- END branching.stable -->
     8.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.2 +++ b/it/examples/branching.tag.it	Thu Aug 13 23:46:21 2009 +0200
     8.3 @@ -0,0 +1,14 @@
     8.4 +<!-- BEGIN branching.tag -->
     8.5 +<screen><prompt>$</prompt> <userinput>hg tag v1.0</userinput>
     8.6 +<prompt>$</prompt> <userinput>hg tip</userinput>
     8.7 +changeset:   1:be452d95a1d0
     8.8 +tag:         tip
     8.9 +user:        Bryan O'Sullivan &lt;bos@serpentine.com&gt;
    8.10 +date:        Fri Jun 05 15:49:15 2009 +0000
    8.11 +summary:     Aggiunta l'etichetta v1.0 per il changeset c93791f54ca9
    8.12 +
    8.13 +<prompt>$</prompt> <userinput>hg tags</userinput>
    8.14 +tip                                1:be452d95a1d0
    8.15 +v1.0                               0:c93791f54ca9
    8.16 +</screen>
    8.17 +<!-- END branching.tag -->
     9.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.2 +++ b/it/examples/branching.update.it	Thu Aug 13 23:46:21 2009 +0200
     9.3 @@ -0,0 +1,10 @@
     9.4 +<!-- BEGIN branching.update -->
     9.5 +<screen><prompt>$</prompt> <userinput>cd ..</userinput>
     9.6 +<prompt>$</prompt> <userinput>hg clone -U principale principale-vecchio</userinput>
     9.7 +<prompt>$</prompt> <userinput>cd principale-vecchio</userinput>
     9.8 +<prompt>$</prompt> <userinput>hg update v1.0</userinput>
     9.9 +1 file aggiornati, 0 file uniti, 0 file rimossi, 0 file irrisolti
    9.10 +<prompt>$</prompt> <userinput>cat miofile</userinput>
    9.11 +Questa è una funzione noiosa.
    9.12 +</screen>
    9.13 +<!-- END branching.update -->
    10.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.2 +++ b/it/examples/ch06-apache-config.lst.it	Thu Aug 13 23:46:21 2009 +0200
    10.3 @@ -0,0 +1,13 @@
    10.4 +<!-- BEGIN ch06/apache-config.lst -->
    10.5 +<programlisting>&lt;Directory /home/*/public_html&gt;
    10.6 +  AllowOverride FileInfo AuthConfig Limit
    10.7 +  Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    10.8 +  &lt;Limit GET POST OPTIONS&gt;
    10.9 +    Order allow,deny
   10.10 +    Allow from all
   10.11 +  &lt;/Limit&gt;
   10.12 +  &lt;LimitExcept GET POST OPTIONS&gt;
   10.13 +    Order deny,allow Deny from all
   10.14 +  &lt;/LimitExcept&gt;
   10.15 +&lt;/Directory&gt;</programlisting>
   10.16 +<!-- END ch06/apache-config.lst -->