mercoledì 12 agosto 2009

Migrazione da CVS a Mercurial

E' giunto il momento di cambiare, e vista la (relativa) calma di questi giorni estivi mi sono deciso e ho cominciato la migrazione del repository aziendale dal (vecchio) sistema CVS al nuovo Mercurial. Chiaramente i motivi che mi hanno spinto a fare questa migrazione sono tanti, CVS è un programma stabile che ha funzionato (e funzionerà) per anni, ma c'erano delle funzionalità di cui non potevo fare a meno, tra cui quella di poter lavorare su repository offline e una migliore gestione dei branch.

Se ancora non conoscete Mercurial vi consiglio di leggere questo ottimo tutorial e vi consiglio di provarlo!

Se anche voi avete uno o più progetti sotto CVS potete fare una conversione automatica, grazie ad una "extension" di Mercurial verranno importati automaticamente tutti i commenti di commit e i vari branch con un solo comando!

Prima di vedere come effettuare l'import occorre abilitare l'apposita estenzione modificando il file .hgrc che troverete nella vostra home aggiungendo le righe:
[extensions]
hgext.convert=

a questo punto basterà digitare:
$ hg convert --authors ./aut.txt <repository cvs>

dove <repository cvs> è la directory che contiene il vostro progetto, sarà compito di Mercurial andare a pescare dal relativo server CVS tutti i dati che occorrono (log compresi) per la conversione. Sulla riga di comando ho anche aggiunto l'opzione per la conversione dei nomi degli autori, questi devono essere elencati in un file di testo nel seguente modo:
luca=Luca Morettoni <luca@morettoni.net>

Terminata la conversione troverete una nuova cartella denominata <repository cvs>-hg che contiene il nuovo repository in formato Mercurial pronto all'uso! Inoltre, se i vostri file "sotto CVS" dovessero essere modificati, vi basterà rilanciare il comando di conversione per "allineare" le modifiche!

Ovviamente, nella directory appena creata troverete il branch principale dei sorgenti, tuttavia come già detto Mercurial importa tutti i branch, quindi se vogliamo lavorare su un branch differente basterà clonare il nostro reporitory con:
$ hg clone progetto-hg progetto-2.1

e successivamente passare al branch che vogliamo (ad esempio quello denominato release_2_1):
$ hg up -C release_2_1

se vogliamo conoscere quali branch sono disponibili all'interno del repository basta digitare:
$ hg branches

mentre per conoscere quello "attivo" nel nostro repository di lavoro:
$ hg branch

Facile vero? Per convertire tutti i miei progetti ci sono voluti veramente pochi minuti...
enjoy HG :)