wiki:MultipleCVStoSingleSVN

Come unificare più repository CVS su un singolo repository Subversion

Il problema si pone quando si vogliono unificare più repository CVS su un solo repository Subversion, o estrarre da un repository CVS un certo numero di sottodirectory (considerate come progetti singoli) e trasformarle in un unico repository Subversion. La procedura per migrare un repository CVS alla volta è illustrata con qualche inesattezza (almeno al tempo della stesura di queste note) nelle FAQ di cvs2svn (su http://cvs2svn.tigris.org/faq.html#oneatatime). Detta procedura suggerisce di farsi sempre una copia delle directory del CVS per precauzione, usando una nuova directory, con qualcosa del tipo di:

mkdir -p newcvsrepo/CVSROOT
cp -r /var/cvs/PrimoPezzo /home/newcvsrepo/
cp -r /var/cvs/SecondoPezzo /home/newcvsrepo/
cp -r /var/cvs/ecc /home/newcvsrepo/
...

dove CVSROOT è necessaria per cvs2svn, mentre gli altri comandi servono solo per copiarsi i pezzi che poi saranno importati.

Il passo successivo è quello di creare il repository SVN che ospiterà i vari pezzi presi da CVS. Questo si fa al solito con svnadmin, in maniera identica a quanto illustrato in ConversioneDalCVS, con:

svnadmin create --fs-type fsfs /var/svn/nuovoSVN

a questo punto si può cominciare con la conversione usando cvs2svn, da ripetere ottenendo un dump di ciascun pezzo (in questo caso usare il dump è obbligatorio, dato che poi i vari pezzi dovranno essere messi nello stesso repository Subversion, non si può usare la forma di cvs2svn con l'opzione -s). Per semplificarci la vita facciamo tutto in una nuova directory:

mkdir newsvn
cd newsvn
cvs2svn --dump-only --mime-type=/etc/mime.types --eol-from-mime-type --no-default-eol --keywords-off ~/newcvsrepo/PrimoPezzo

a questo punto vogliamo importare questo nel nuovo repository sotto la directory PrimoPezzo, che pertanto deve essere creata, questo comporta allora:

svn co /var/svn/NuovoSVN .
mkdir PrimoPezzo
svn add PrimoPezzo
svn ci

e a questo punto potremo importare il dump ottenuto in precedenza con:

svnadmin --parent-dir PrimoPezzo load /var/svn/NuovoSVN < cvs2svn-dump

e ripetendo la procedura per tutti gli altri pezzi si realizzerà la conversione.

Si tenga presente però che così facendo la struttura del repository Subversion non sarà più quella classica con le tre directory branch, tags e trunk, dato che queste saranno ricreate (a partire dai dati estratti dal CVS) al di sotto delle directory in cui si sono importati i singoli pezzi (cioè sotto PrimoPezzo, SecondoPezzo, ecc.).

Inoltre la sequenza delle release dipenderà ovviamente dall'ordine in cui si sono effettuate le varie importazioni, per cui sarà normale che un changeset di PrimoPezzo abbia una release minore di uno di SecondoPezzo anche se quest'ultimo è stato fatto in un tempo precedente (i tempi saranno riportati correttamente, quello che si rompe è la corrispondenza fra tempo successivo e release successiva).

Last modified 12 years ago Last modified on Aug 25, 2006, 1:32:31 PM