hgbook

annotate it/appA-svn.xml @ 976:713f0f69029a

merge with Italian, and very (few) work on ch03
author Romain PELISSE <belaran@gmail.com>
date Fri Sep 04 16:33:35 2009 +0200 (2009-09-04)
parents
children 719b03ea27c8
rev   line source
belaran@976 1 <appendix id="chap:svn">
belaran@976 2 <?dbhtml filename="migrare-verso-mercurial.html"?>
belaran@976 3 <title>Migrare verso Mercurial</title>
belaran@976 4
belaran@976 5 <para id="x_6e1">Un modo comune di esplorare un nuovo strumento di controllo di revisione è quello di sperimentarlo trasferendo un progetto esistente piuttosto che cominciare un nuovo progetto da zero.</para>
belaran@976 6
belaran@976 7 <para id="x_6e2">In questa appendice, parleremo di come importare la cronologia di un progetto in Mercurial e di quello a cui dovete essere preparati se siete abituati a un sistema di controllo di revisione differente.</para>
belaran@976 8
belaran@976 9 <sect1>
belaran@976 10 <title>Importare la cronologia da un altro sistema</title>
belaran@976 11
belaran@976 12 <para id="x_6e3">Mercurial include un&rsquo;estensione chiamata <literal>convert</literal> che può importare la cronologia di un progetto dalla maggior parte dei sistemi di controllo di revisione più popolari. Al momento in cui il libro è stato scritto, l&rsquo;estensione può importare la cronologia dai seguenti sistemi:</para>
belaran@976 13 <itemizedlist>
belaran@976 14 <listitem>
belaran@976 15 <para id="x_6e4">Subversion</para>
belaran@976 16 </listitem>
belaran@976 17 <listitem>
belaran@976 18 <para id="x_6e5">CVS</para>
belaran@976 19 </listitem>
belaran@976 20 <listitem>
belaran@976 21 <para id="x_6e6">git</para>
belaran@976 22 </listitem>
belaran@976 23 <listitem>
belaran@976 24 <para id="x_6e7">Darcs</para>
belaran@976 25 </listitem>
belaran@976 26 <listitem>
belaran@976 27 <para id="x_6e8">Bazaar</para>
belaran@976 28 </listitem>
belaran@976 29 <listitem>
belaran@976 30 <para id="x_6e9">Monotone</para>
belaran@976 31 </listitem>
belaran@976 32 <listitem>
belaran@976 33 <para id="x_6ea">GNU Arch</para>
belaran@976 34 </listitem>
belaran@976 35 <listitem>
belaran@976 36 <para id="x_6eb">Mercurial</para>
belaran@976 37 </listitem>
belaran@976 38 </itemizedlist>
belaran@976 39
belaran@976 40 <para id="x_6ec">(Per verificare perché lo stesso Mercurial sia supportato come sorgente da cui importare la cronologia, si veda la <xref linkend="svn.filemap"/>.)</para>
belaran@976 41
belaran@976 42 <para id="x_6ed">Potete attivare l&rsquo;estensione nel solito modo, modificando il vostro file <filename>~/.hgrc</filename>.</para>
belaran@976 43
belaran@976 44 <programlisting>[extensions]
belaran@976 45 convert =</programlisting>
belaran@976 46
belaran@976 47 <para id="x_6ee">Questo renderà disponibile il comando <command>hg convert</command>. Il comando è facile da usare. Per esempio, l&rsquo;invocazione seguente importerà in Mercurial la cronologia di Subversion per Nose, un framework per il collaudo di unità.</para>
belaran@976 48
belaran@976 49 <screen><prompt>$</prompt> <userinput>hg convert http://python-nose.googlecode.com/svn/trunk</userinput></screen>
belaran@976 50
belaran@976 51 <para id="x_6ef">L&rsquo;estensione <literal>convert</literal> opera in maniera incrementale. In altre parole, dopo che avete invocato <command>hg convert</command> una prima volta, invocandolo nuovamente importerete tutte le nuove revisioni che sono state inserite dopo la vostra prima esecuzione del comando. La conversione incrementale funzionerà solo se invocate <command>hg convert</command> nello stesso repository Mercurial che avete usato in origine, perché l&rsquo;estensione <literal>convert</literal> salva alcuni metadati privati all&rsquo;interno del repository in un file chiamato <filename>.hg/shamap</filename> non soggetto al controllo di revisione.</para>
belaran@976 52
belaran@976 53 <para id="x_707">Quando volete cominciare a effettuare modifiche usando Mercurial, è preferibile clonare l&rsquo;albero in cui state facendo le vostre conversioni e tenere da parte l&rsquo;albero originale per dedicarlo a future conversioni incrementali. Questo è il modo più sicuro per estrarre i futuri commit dal sistema di controllo di revisione sorgente e incorporarli nel progetto Mercurial che avete appena creato.</para>
belaran@976 54
belaran@976 55 <sect2>
belaran@976 56 <title>Convertire molti rami</title>
belaran@976 57
belaran@976 58 <para id="x_708">Il comando <command>hg convert</command> eseguito in precedenza converte solo la cronologia del <literal>trunk</literal> del repository Subversion. Se invece usiamo l&rsquo;URL <literal>http://python-nose.googlecode.com/svn</literal>, Mercurial individuerà automaticamente le directory <literal>trunk</literal>, <literal>tags</literal> e <literal>branches</literal> che compongono la struttura usata di solito dai progetti Subversion e le importerà come rami separati.</para>
belaran@976 59
belaran@976 60 <para id="x_709">Per default, a ogni ramo Subversion importato in Mercurial viene assegnato un nome. Dopo che la conversione si è conclusa, potete ottenere una lista dei nomi dei rami attivi nel repository Mercurial usando <command>hg branches -a</command>. Se preferite importare i rami Subversion senza nomi, passate l&rsquo;opzione <option>--config convert.hg.usebranchnames=false</option> al comando <command>hg convert</command>.</para>
belaran@976 61
belaran@976 62 <para id="x_70a">Una volta che avete convertito il vostro albero, se volete seguire la consuetudine tipica per Mercurial di lavorare in un albero che contiene un singolo ramo, potete clonare quel singolo ramo usando <command>hg clone -r nomedelramo</command>.</para>
belaran@976 63 </sect2>
belaran@976 64
belaran@976 65 <sect2>
belaran@976 66 <title>Correlare i nomi utente</title>
belaran@976 67
belaran@976 68 <para id="x_6f0">Alcuni strumenti di controllo di revisione salvano con ogni inserimento solo nomi utenti brevi che possono essere difficili da interpretare. Con Mercurial, la norma è quella di salvare il nome e l&rsquo;indirizzo email di chi effettua il commit, due informazioni molto più utili se in seguito volessimo contattare quella persona.</para>
belaran@976 69
belaran@976 70 <para id="x_6f1">Se state convertendo un albero da un sistema di controllo di revisione che usa nomi brevi, potete correlare quei nomi a equivalenti più lunghi passando l&rsquo;opzione <option>--authors</option> al comando <command>hg convert</command>. Questa opzione accetta un nome di file che dovrebbe contenere voci nel seguente formato.</para>
belaran@976 71
belaran@976 72 <programlisting>arist = Aristotele &lt;aristotele@filo.example.gr&gt;
belaran@976 73 soc = Socrate &lt;socrate@filo.example.gr&gt;</programlisting>
belaran@976 74
belaran@976 75 <para id="x_6f2">Ogni volta che <literal>convert</literal> incontra un commit associato al nome utente <literal>arist</literal> nel repository sorgente, userà il nome <literal>Aristotele &lt;aristotele@filo.example.gr&gt;</literal> nella revisione convertita in Mercurial. Se non viene trovata alcuna corrispondenza per un certo nome, quel nome viene usato alla lettera.</para>
belaran@976 76 </sect2>
belaran@976 77
belaran@976 78 <sect2 id="svn.filemap">
belaran@976 79 <title>Riordinare l&rsquo;albero</title>
belaran@976 80
belaran@976 81 <para id="x_6f3">Non tutti i progetti hanno una cronologia pulita. Potrebbe esserci una directory che non avrebbe mai dovuto essere inserita, un file che è troppo grande, o un&rsquo;intera gerarchia che ha bisogno di essere riorganizzata.</para>
belaran@976 82
belaran@976 83 <para id="x_6f4">L&rsquo;estensione <literal>convert</literal> supporta l&rsquo;idea di una <quote>mappa di file</quote> che può essere impiegata per riorganizzare i file e le directory di un progetto nel momento in cui se ne importa la cronologia. Questo è utile non solo quando si importa la cronologia da altri sistemi di controllo di revisione, ma anche per potare o riorganizzare un albero Mercurial.</para>
belaran@976 84
belaran@976 85 <para id="x_6f5">Per specificare una mappa di file, usate l&rsquo;opzione <option>--filemap</option> e fornitele un nome di file. Una mappa di file contiene righe nei seguenti formati.</para>
belaran@976 86
belaran@976 87 <programlisting># Questo è un commento
belaran@976 88 # Le righe vuote vengono ignorate
belaran@976 89
belaran@976 90 include percorso/del/file
belaran@976 91
belaran@976 92 exclude percorso/del/file
belaran@976 93
belaran@976 94 rename da/qualche/percorso a/qualche/altra/posizione
belaran@976 95 </programlisting>
belaran@976 96
belaran@976 97 <para id="x_6f6">La direttiva <literal>include</literal> provoca l&rsquo;inclusione di un file, o di tutti i file contenuti in una directory, nel repository destinazione. Questa direttiva provoca anche l&rsquo;esclusione di tutti gli altri file o directory che non sono state esplicitamente incluse. La direttiva <literal>exclude</literal> provoca l&rsquo;esclusione dei file e delle directory indicate e di tutti quegli altri percorsi che non sono stati esplicitamente menzionati per essere inclusi.</para>
belaran@976 98
belaran@976 99 <para id="x_6f7">Per spostare un file o una directory da una posizione a un&rsquo;altra, usate la direttiva <literal>rename</literal>. Se dovete spostare un file o una directory da una sottodirectory alla radice del repository, usate <literal>.</literal> come secondo argomento della direttiva <literal>rename</literal>.</para>
belaran@976 100 </sect2>
belaran@976 101
belaran@976 102 <sect2>
belaran@976 103 <title>Migliorare le prestazioni della conversione da Subversion</title>
belaran@976 104
belaran@976 105 <para id="x_70b">Avrete spesso bisogno di fare diversi tentativi prima di trovare la combinazione perfetta tra mappa di utenti, mappa di file e altri parametri di conversione. La conversione di un repository Subversion attraverso un protocollo di accesso come ssh o HTTP può procedere migliaia di volte più lentamente di quanto Mercurial sia capace di operare in realtà, a causa della latenza di rete. Questo può rendere molto complicata la messa a punto di quella ricetta per la conversione perfetta.</para>
belaran@976 106
belaran@976 107 <para id="x_70c">Il comando <ulink url="http://svn.collab.net/repos/svn/trunk/notes/svnsync.txt"><command>svnsync</command></ulink> può velocizzare notevolmente la conversione di un repository Subversion. Serve per creare un mirror di sola lettura di un repository Subversion. L&rsquo;idea è quella di creare un mirror locale del vostro albero Subversion per poi convertire il mirror in un repository Mercurial.</para>
belaran@976 108
belaran@976 109 <para id="x_70d">Immaginiamo di voler convertire il repository Subversion che contiene il popolare progetto Memcached in un albero Mercurial. Per prima cosa, creiamo un repository Subversion locale.</para>
belaran@976 110
belaran@976 111 <screen><prompt>$</prompt> <userinput>svnadmin create memcached-mirror</userinput></screen>
belaran@976 112
belaran@976 113 <para id="x_70e">Successivamente, impostiamo un hook Subversion di cui <command>svnsync</command> ha bisogno.</para>
belaran@976 114
belaran@976 115 <screen><prompt>$</prompt> <userinput>echo '#!/bin/sh' > memcached-mirror/hooks/pre-revprop-change</userinput>
belaran@976 116 <prompt>$</prompt> <userinput>chmod +x memcached-mirror/hooks/pre-revprop-change</userinput></screen>
belaran@976 117
belaran@976 118 <para id="x_70f">Poi inizializziamo <command>svnsync</command> in questo repository.</para>
belaran@976 119
belaran@976 120 <screen><prompt>$</prompt> <userinput>svnsync --init file://`pwd`/memcached-mirror \
belaran@976 121 http://code.sixapart.com/svn/memcached</userinput></screen>
belaran@976 122
belaran@976 123 <para id="x_710">Il passo successivo consiste nell&rsquo;avviare il processo di creazione del mirror con il comando <command>svnsync</command>.</para>
belaran@976 124
belaran@976 125 <screen><prompt>$</prompt> <userinput>svnsync sync file://`pwd`/memcached-mirror</userinput></screen>
belaran@976 126
belaran@976 127 <para id="x_711">Infine, importiamo la cronologia del nostro mirror locale del repository Subversion in un repository Mercurial.</para>
belaran@976 128
belaran@976 129 <screen><prompt>$</prompt> <userinput>hg convert memcached-mirror</userinput></screen>
belaran@976 130
belaran@976 131 <para id="x_712">Se il repository Subversion è ancora attivo, possiamo usare questo processo in maniera incrementale. Invochiamo <command>svnsync</command> per propagare i nuovi cambiamenti verso il nostro mirror e poi invochiamo <command>hg convert</command> per importarli nel nostro albero Mercurial.</para>
belaran@976 132
belaran@976 133 <para id="x_713">Un&rsquo;importazione in due stadi realizzata con <command>svnsync</command> ha due vantaggi. Il primo è che <command>svnsync</command> usa una sincronizzazione di rete con Subversion più efficiente rispetto al comando <command>hg convert</command>, quindi trasferisce meno dati attraverso la rete. Il secondo è che l&rsquo;importazione da un albero Subversion locale è così veloce che potete aggiustare ripetutamente le vostre impostazioni di conversione senza aspettare ogni volta la terminazione di un processo di conversione basato su rete e dolorosamente lento.</para>
belaran@976 134 </sect2>
belaran@976 135 </sect1>
belaran@976 136
belaran@976 137 <sect1>
belaran@976 138 <title>Migrare da Subversion</title>
belaran@976 139
belaran@976 140 <para id="x_6f8">Attualmente Subversion è il sistema di controllo di revisione open source più popolare. Sebbene ci siano molte differenze tra Mercurial e Subversion, effettuare una transizione da Subversion a Mercurial non è particolarmente difficile. I due sistemi hanno insiemi di comandi simili e interfacce generalmente uniformi.</para>
belaran@976 141
belaran@976 142 <sect2>
belaran@976 143 <title>Differenze filosofiche</title>
belaran@976 144
belaran@976 145 <para id="x_6f9">Naturalmente, la differenza fondamentale tra Subversion e Mercurial è che Subversion è centralizzato mentre Mercurial è distribuito. Dato che Mercurial memorizza tutta la cronologia di un progetto sul vostro disco locale, ha bisogno di accedere alla rete solo quando volete esplicitamente comunicare con un altro repository. Al contrario, Subversion memorizza localmente un&rsquo;esigua quantità di informazioni, perciò il client deve contattare il proprio server per molte operazioni comuni.</para>
belaran@976 146
belaran@976 147 <para id="x_6fa">Subversion riesce più o meno a cavarsela senza una nozione di ramo ben definita: qualificare come ramo una porzione dello spazio di nomi sul server è una questione di convenzioni, e il software non impone alcuna costrizione. Mercurial tratta un repository come l&rsquo;unità della gestione dei rami.</para>
belaran@976 148
belaran@976 149 <sect3>
belaran@976 150 <title>L&rsquo;ambito dei comandi</title>
belaran@976 151
belaran@976 152 <para id="x_6fb">Dato che Subversion non sa quali parti del suo spazio di nomi siano realmente rami, tratta la maggior parte dei comandi come se richiedesse di operare al livello della directory in cui vi trovate e ai livelli sottostanti. Per esempio, se eseguite <command>svn log</command>, otterrete la cronologia di qualunque parte dell&rsquo;albero stiate osservando, non dell&rsquo;intero albero.</para>
belaran@976 153
belaran@976 154 <para id="x_6fc">Il comportamento predefinito di Mercurial è differente perché i suoi comandi operano sull&rsquo;intero repository. Eseguite <command>hg log</command> e vi mostrerà la cronologia dell&rsquo;intero albero, a prescindere da quale parte della directory di lavoro stiate visitando in quel momento. Se volete solo la cronologia di un file o di una directory particolare, vi basta fornire un nome al comando, e.g. <command>hg log sorgenti</command>.</para>
belaran@976 155
belaran@976 156 <para id="x_6fd">Secondo la mia esperienza, questa differenza nel comportamento predefinito dei comandi è probabilmente la cosa che può confondervi di più se dovete spostarvi frequentemente avanti e indietro tra i due strumenti.</para>
belaran@976 157 </sect3>
belaran@976 158
belaran@976 159 <sect3>
belaran@976 160 <title>Operazioni multi-utente e sicurezza</title>
belaran@976 161
belaran@976 162 <para id="x_6fe">Con Subversion, è normale (anche se blandamente deprecato) che più persone collaborino su un singolo ramo. Se Alice e Bruno stanno lavorando insieme e Alice inserisce alcune modifiche nel ramo condiviso, Bruno deve aggiornare la vista del ramo del suo client prima di poter effettuare un commit. Dato che in quel momento non esiste alcuna registrazione permanente dei cambiamenti fatti da Bruno, le sue modifiche potrebbero rovinarsi o andare perdute durante e dopo questo aggiornamento.</para>
belaran@976 163
belaran@976 164 <para id="x_6ff">Mercurial, invece, incoraggia un modello di inserimento-e-unione. Bruno inserisce le sue modifiche nella sua copia locale del repository prima di estrarre o trasmettere i cambiamenti da o verso il server che condivide con Alice. Se Alice trasmette i suoi cambiamenti prima che Bruno provi a trasmettere i propri, Bruno non sarà in grado di trasmettere i suoi cambiamenti prima di aver estratto quelli di Alice, averli incorporati e aver effettuato il commit dei risultati dell&rsquo;unione. Se Bruno commette un errore durante l&rsquo;unione, può sempre ritornare al commit con il quale aveva registrato i suoi cambiamenti.</para>
belaran@976 165
belaran@976 166 <para id="x_700">Vale la pena sottolineare che questi sono i modi più comuni di lavorare con questi strumenti. Subversion supporta un modello più sicuro per consentirvi di lavorare nel vostro ramo personale, che però in pratica si rivela abbastanza scomodo da non essere particolarmente diffuso. Mercurial può supportare un modello meno sicuro che permette di estrarre e unire i cambiamenti nonostante la presenza di modifiche non ancora registrate, ma questo è considerato estremamente inusuale.</para>
belaran@976 167 </sect3>
belaran@976 168
belaran@976 169 <sect3>
belaran@976 170 <title>Cambiamenti locali o pubblici</title>
belaran@976 171
belaran@976 172 <para id="x_701">Il comando <command>svn commit</command> pubblica immediatamente i cambiamenti su un server dove possono essere visti da chiunque abbia accesso in lettura.</para>
belaran@976 173
belaran@976 174 <para id="x_702">Con Mercurial, i commit sono sempre locali e devono essere pubblicati successivamente tramite il comando <command>hg push</command>.</para>
belaran@976 175
belaran@976 176 <para id="x_703">Ogni approccio ha i propri vantaggi e svantaggi. Il modello di Subversion prevede che i cambiamenti siano pubblicati, e quindi revisionabili e utilizzabili, immediatamente. D&rsquo;altra parte, questo significa che un utente deve avere accesso in scrittura a un repository per utilizzare normalmente lo strumento, ma la maggior parte dei progetti open source non concede i permessi di scrittura alla leggera.</para>
belaran@976 177
belaran@976 178 <para id="x_704">L&rsquo;approccio di Mercurial consente a chiunque possa clonare un repository di inserirvi modifiche senza il bisogno del permesso di qualcun altro e di pubblicare i propri cambiamenti e continuare a partecipare nel modo che preferisce. A causa della distinzione tra le operazioni di inserimento e trasmissione dei cambiamenti, può capitare che qualcuno effettui il commit di alcune modifiche sul proprio computer e si allontani per qualche giorno dimenticandosi di trasmetterli, cosa che in rari casi potrebbe bloccare temporaneamente le attività dei collaboratori.</para>
belaran@976 179 </sect3>
belaran@976 180 </sect2>
belaran@976 181
belaran@976 182 <sect2>
belaran@976 183 <title>Guida rapida</title>
belaran@976 184
belaran@976 185 <table>
belaran@976 186 <title>Equivalenze tra i comandi Subversion e Mercurial</title>
belaran@976 187 <tgroup cols="3">
belaran@976 188 <thead>
belaran@976 189 <row>
belaran@976 190 <entry>Subversion</entry>
belaran@976 191 <entry>Mercurial</entry>
belaran@976 192 <entry>Notes</entry>
belaran@976 193 </row>
belaran@976 194 </thead>
belaran@976 195 <tbody>
belaran@976 196 <row>
belaran@976 197 <entry><command>svn add</command></entry>
belaran@976 198 <entry><command>hg add</command></entry>
belaran@976 199 <entry></entry>
belaran@976 200 </row>
belaran@976 201 <row>
belaran@976 202 <entry><command>svn blame</command></entry>
belaran@976 203 <entry><command>hg annotate</command></entry>
belaran@976 204 <entry></entry>
belaran@976 205 </row>
belaran@976 206 <row>
belaran@976 207 <entry><command>svn cat</command></entry>
belaran@976 208 <entry><command>hg cat</command></entry>
belaran@976 209 <entry></entry>
belaran@976 210 </row>
belaran@976 211 <row>
belaran@976 212 <entry><command>svn checkout</command></entry>
belaran@976 213 <entry><command>hg clone</command></entry>
belaran@976 214 <entry></entry>
belaran@976 215 </row>
belaran@976 216 <row>
belaran@976 217 <entry><command>svn cleanup</command></entry>
belaran@976 218 <entry>n/a</entry>
belaran@976 219 <entry>Nessuna pulizia necessaria</entry>
belaran@976 220 </row>
belaran@976 221 <row>
belaran@976 222 <entry><command>svn commit</command></entry>
belaran@976 223 <entry><command>hg commit</command>; <command>hg
belaran@976 224 push</command></entry>
belaran@976 225 <entry><command>hg push</command> pubblica le modifiche dopo il commit</entry>
belaran@976 226 </row>
belaran@976 227 <row>
belaran@976 228 <entry><command>svn copy</command></entry>
belaran@976 229 <entry><command>hg clone</command></entry>
belaran@976 230 <entry>Per creare un nuovo ramo</entry>
belaran@976 231 </row>
belaran@976 232 <row>
belaran@976 233 <entry><command>svn copy</command></entry>
belaran@976 234 <entry><command>hg copy</command></entry>
belaran@976 235 <entry>Per copiare file o directory</entry>
belaran@976 236 </row>
belaran@976 237 <row>
belaran@976 238 <entry><command>svn delete</command> (<command>svn
belaran@976 239 remove</command>)</entry>
belaran@976 240 <entry><command>hg remove</command></entry>
belaran@976 241 <entry></entry>
belaran@976 242 </row>
belaran@976 243 <row>
belaran@976 244 <entry><command>svn diff</command></entry>
belaran@976 245 <entry><command>hg diff</command></entry>
belaran@976 246 <entry></entry>
belaran@976 247 </row>
belaran@976 248 <row>
belaran@976 249 <entry><command>svn export</command></entry>
belaran@976 250 <entry><command>hg archive</command></entry>
belaran@976 251 <entry></entry>
belaran@976 252 </row>
belaran@976 253 <row>
belaran@976 254 <entry><command>svn help</command></entry>
belaran@976 255 <entry><command>hg help</command></entry>
belaran@976 256 <entry></entry>
belaran@976 257 </row>
belaran@976 258 <row>
belaran@976 259 <entry><command>svn import</command></entry>
belaran@976 260 <entry><command>hg addremove</command>; <command>hg
belaran@976 261 commit</command></entry>
belaran@976 262 <entry></entry>
belaran@976 263 </row>
belaran@976 264 <row>
belaran@976 265 <entry><command>svn info</command></entry>
belaran@976 266 <entry><command>hg parents</command></entry>
belaran@976 267 <entry>Mostra quale revisione è stata estratta</entry>
belaran@976 268 </row>
belaran@976 269 <row>
belaran@976 270 <entry><command>svn info</command></entry>
belaran@976 271 <entry><command>hg showconfig
belaran@976 272 paths.parent</command></entry>
belaran@976 273 <entry>Mostra da quale URL è avvenuta l&rsquo;estrazione</entry>
belaran@976 274 </row>
belaran@976 275 <row>
belaran@976 276 <entry><command>svn list</command></entry>
belaran@976 277 <entry><command>hg manifest</command></entry>
belaran@976 278 <entry></entry>
belaran@976 279 </row>
belaran@976 280 <row>
belaran@976 281 <entry><command>svn log</command></entry>
belaran@976 282 <entry><command>hg log</command></entry>
belaran@976 283 <entry></entry>
belaran@976 284 </row>
belaran@976 285 <row>
belaran@976 286 <entry><command>svn merge</command></entry>
belaran@976 287 <entry><command>hg merge</command></entry>
belaran@976 288 <entry></entry>
belaran@976 289 </row>
belaran@976 290 <row>
belaran@976 291 <entry><command>svn mkdir</command></entry>
belaran@976 292 <entry>n/a</entry>
belaran@976 293 <entry>Mercurial non tiene traccia delle directory</entry>
belaran@976 294 </row>
belaran@976 295 <row>
belaran@976 296 <entry><command>svn move</command> (<command>svn
belaran@976 297 rename</command>)</entry>
belaran@976 298 <entry><command>hg rename</command></entry>
belaran@976 299 <entry></entry>
belaran@976 300 </row>
belaran@976 301 <row>
belaran@976 302 <entry><command>svn resolved</command></entry>
belaran@976 303 <entry><command>hg resolve -m</command></entry>
belaran@976 304 <entry></entry>
belaran@976 305 </row>
belaran@976 306 <row>
belaran@976 307 <entry><command>svn revert</command></entry>
belaran@976 308 <entry><command>hg revert</command></entry>
belaran@976 309 <entry></entry>
belaran@976 310 </row>
belaran@976 311 <row>
belaran@976 312 <entry><command>svn status</command></entry>
belaran@976 313 <entry><command>hg status</command></entry>
belaran@976 314 <entry></entry>
belaran@976 315 </row>
belaran@976 316 <row>
belaran@976 317 <entry><command>svn update</command></entry>
belaran@976 318 <entry><command>hg pull -u</command></entry>
belaran@976 319 <entry></entry>
belaran@976 320 </row>
belaran@976 321 </tbody>
belaran@976 322 </tgroup>
belaran@976 323 </table>
belaran@976 324 </sect2>
belaran@976 325 </sect1>
belaran@976 326
belaran@976 327 <sect1>
belaran@976 328 <title>Suggerimenti utili per i principianti</title>
belaran@976 329
belaran@976 330 <para id="x_705">In alcuni sistemi di controllo di revisione, può diventare complicato stampare le differenze per una singola revisione registrata nel repository. Per esempio, con Subversion, per vedere cos&rsquo;è cambiato nella revisione 104654 dovete digitare <command>svn diff -r104653:104654</command>. Mercurial elimina la necessità di digitare due volte l&rsquo;identificatore di revisione in questo caso comune. Per ottenere solo le differenze, digitate <command>hg export 104654</command>. Per ottenere un messaggio dal registro della cronologia seguito dalle differenze, digitate <command>hg log -r104654 -p</command>.</para>
belaran@976 331
belaran@976 332 <para id="x_706">Quando eseguite <command>hg status</command> senza argomenti, vi viene mostrato lo stato dell&rsquo;intero albero, con i percorsi relativi alla radice del repository. Questo rende complicato copiare un nome di file dal risultato di <command>hg status</command> alla riga di comando. Se eseguite <command>hg status</command> passandogli il nome di un file o di una directory, il comando stamperà i percorsi relativi alla vostra posizione corrente. Quindi, per ottenere da <command>hg status</command> lo stato di tutto l&rsquo;albero, con i percorsi relativi alla vostra directory corrente invece che alla radice del repository, passate il risultato di <command>hg root</command> al comando <command>hg status</command>. Su un sistema di tipo Unix, potete farlo facilmente nel modo che segue:</para>
belaran@976 333
belaran@976 334 <screen><prompt>$</prompt> <userinput>hg status `hg root`</userinput></screen>
belaran@976 335 </sect1>
belaran@976 336 </appendix>