In un precedente articolo si è parlato della installazione e configurazione di un server SVN su ambiente Linux (distribuzione Debian). Una volta configurato il server, però, mi si è posto il problema dell’importazione di una repository salvata su un server SVN installato su un’altra macchina (Windows), eseguendo una procedura alquanto semplice e che ha “travasato” tutta la history, senza perdere nessun dato.
Ecco i passi da eseguire:
1. Backup della vecchia repository: Occorre effettuare un dump della repository che si occorre importare eseguendo il comando da terminale (DOS su Windows; shell/bash su Unix)
svnadmin dump /path/to/repository > repo_name.svn_dump
Tale comando invoca il servizio svnadmin (occorre ovviamente essere amministratori della macchina) che esegue il comando dump, seguito dal path assoluto della repository (il path è quello del file system e non la URL della repository). Il dump copia tutta la repository in un file che ha estensione svn_dump che potete chiamare come preferite (potete specificare anche un path assoluto in cui salvare tale file).
2. Creazione della nuova repository: se non avete già creato una repository sul nuovo server SVN, occorre crearla con il comando svnadmin create
svnadmin create /path/to/repository
3. Importazione del dump sulla nuova repository: a questo punto, copiare il dump che avete esportato sulla nuova macchina, posizionatevi da terminale nella directory dove avete copiato il file di dump e lanciate il comando svnadmin load
svnadmin load /path/to/repository < repo_name.svn_dump
In alcuni casi, occorre forzare che l’UUID della nuova repository sia uguale a quella della vecchia. Per cui, se vi viene visualizzato un errore del genere dopo aver lanciato il comando load, potete rilanciare la precedente riga di codice specificando l’opzione –force-uuid (l’UUID della vecchia repository la potete vedere con un client SVN visionando le proprietà della working copy).
Ecco dei comandi utili per poter visualizzare e settare la UUID di una repository:
$ svnlook uuid /var/svn/repos cf2b9d22-acb5-11dc-bc8c-05e83ce5dbec
$ svnadmin setuuid /var/svn/repos #NOTA. generate a new UUID
$ svnlook uuid /var/svn/repos 3c3c38fe-acc0-11dc-acbc-1b37ff1c8e7c
$ svnadmin setuuid /var/svn/repos cf2b9d22-acb5-11dc-bc8c-05e83ce5dbec #NOTA. restore the old UUID
$ svnlook uuid /var/svn/repos cf2b9d22-acb5-11dc-bc8c-05e83ce5dbec
Importazione di una repository a partire da una specifica revisione
E’ possibile importare una vecchia repository anche a partire da una specifica revisione. Occorre effettuare il dump specificando quale revisione importare e importando poi in modo incrementale. Ecco i comandi:
svnadmin dump --incremental -r 1234 /path/to/repository > rev1234.svn_dump
L'importazione nella nuova repository si importa allo stesso modo:
svnadmin load /path/to/repository < rev1234.svn_dump

This work by Francesco Ficetola is licensed under a Creative Commons Attribution 4.0 International License.
Based on a work at www.francescoficetola.it.
Permissions beyond the scope of this license may be available at http://www.francescoficetola.it/2012/02/04/subversion-spostamento-di-una-repository-da-un-server-svn-ad-un-altro/.