mag  09
18

Convertire un repository SVN a Git

Pubblicato il 18 maggio, 2009
Autore: Michele

Fino ad ora per la gestione dei miei progetti software ho sempre usato Subversion (SVN) come sistema di controllo versione. Tuttavia, negli ultimi mesi, a causa di specifiche necessità, è stato scelto di adottare Git come sistema di controllo versione per uno dei progetti su cui sto lavorando. Git è un nuovo sistema di controllo versione, distribuito, libero ed open-source, ideato da Linus Torvalds, adatto a progetti sia di piccole che grandi dimensioni. Dopo alcune settimane di prova, ho deciso di utilizzare Git anche per un altro progetto software che fino ad ora gestivo usando SVN. Di conseguenza, ho avuto la necessità di capire come convertire un repository SVN già esistente ad un repository Git, senza perdere le informazioni sulle operazioni che sono già state effettuate sul progetto.

Convertire un repository SVN ad un repository Git non è un’operazione particolarmente complessa. Di seguito indico i passi che ho seguito per effettuare la conversione del repository.

File degli utenti
Come prima cosa ho creato una directory temporanea chiamata: “temp_prg”. Successivamente ho creato un file di testo chiamato “authors” all’interno del quale è stato definito il mapping tra gli utenti del repository SVN già esistente ed il nuovo repository Git. Ho eseguito tali operazioni su una macchina Mac direttamente da riga di comando, ma nessuno vieta di eseguirle, tutte o parte di esse, usando un ambiente grafico.

mkdir temp_prg
cd temp_prg
touch authors
nano authors

Il primo comando (mkdir temp_prg) viene utilizzato per creare una directory temporanea chiamata “temp_prg”. Il secondo comando (cd temp_prg) viene usato per entrare all’interno della directory appena creata. Il comando (touch authors), crea un nuovo file vuoto chiamato “authors”. Per editare il file di testo ho utilizzato l’editor “nano” (vedi ultimo comando). Chiaramente è possibile editare tale file utilizzando qualsiasi editor testuale grafico o non grafico (eg. emacs, TextMate, etc.).

Il file “authors” dovrebbe avere un contenuto molto simile al seguente dove: nella parte sinista vengono specificati gli username degli utenti del repository SVN già esistente, mentre nella parte destra il corrispettivo identificatico che gli stessi utenti avranno nel repository Git.

michele = Michele <michele_mail@testMail.org>
christian = Christian <christian_mail@testMail.org>
andrea = Andrea <andrea_mail@testMail.org>

Repository Git Temporaneo
A questo punto, per creare il nuovo repository Git a partire dal repository SVN già esistente, digitare il seguente comando:

git svn clone --authors-file=/path_to/authors http://my_server/svn_repository/project

Il parametro "--authors-file" viene utilizzato per indicare il file contenente il mapping tra gli utenti del repository SVN e quelli del nuovo repository Git, in pratica, il file “authors” precedentemente creato. L’ultimo parametro (http://my_server/svn_repository/project) rapressenta l’URL del repository SVN già esistente. Se il repository SVN ha una struttura standard e comprende le directory “trunk”, “branches” e “tags”, al precendete comando può essere aggiunto il parametro "--stdlayout". Invece, se si vuole convertire il repository SVN omettento anche i metadati relativi alle revisioni basta aggiungere il parametro "--no-metadata".

Repository Git Finale
Terminata l’esecuzione del comando precedentemente illustrato, si otterrà un repository Git sulla propria macchia locale. Se necessario, in base alle proprie necessità impostare i permessi del repository ed alla fine, digitare il seguente comando:

git clone --bare myproject myproject.git

dove “myproject” indica il nome del repository Git temporaneo mentre “myproject.git” indica il nome del repository Git definitivo. A questo punto è necessario controllare che il repository Git finale comprenda tutte le informazioni presenti nel vecchio repository SVN. In caso affermativo, è possibile cancellare il repository Git temporaneo. Il repository Git finale (myproject.git) può anche essere uploadato in un server in modo da poterlo utilizzare come repository centrale (shared repository). In questo caso, anche sulla base delle configurazioni del proprio server, prima di eseguire l’upload del repository Git, potrebbe essere necessario digitare i seguenti comandi:

cd myproject.git
git config core.sharedrepository 1
git config receive.denyNonFastforwards true
find objects -type d -exec chmod 02770 {} \;

Links Utili
Sito ufficiale Git: http://git-scm.com/
Documentazione Git: http://git-scm.com/documentation
GitX, una GUI per Mac OSX: http://gitx.frim.nl/




Inserisci un commento

This is a captcha-picture. It is used to prevent mass-access by robots. (see: www.captcha.net)

Rigenera Immagine

Inserisci il codice mostrato in figura ed invia il commento (case-sensitive)