Come esportare (e quindi importare) un repository Subversion?

Sono solo avvolto in un progetto in cui stavo usando un provider SVN commerciale per memorizzare il codice sorgente. L’host web che il cliente ha scelto in definitiva include un repository come parte del pacchetto di hosting, quindi, ora che il progetto è finito, mi piacerebbe spostare il repository sul proprio host web e interrompere l’account commerciale.

Come potrei fare questo?

Se vuoi spostare il repository e mantenere la cronologia, probabilmente avrai bisogno dell’accesso al filesystem su entrambi gli host. La soluzione più semplice, se il tuo backend è FSFS (l’impostazione predefinita per le versioni recenti), è creare una copia del filesystem dell’intera cartella del repository.

Se hai un backend Berkley DB, se non sei sicuro di quale sia il tuo back-end, o se stai cambiando i numeri di versione SVN, vorrai usare svnadmin per scaricare il tuo vecchio repository e caricarlo nel tuo nuovo repository. L’uso di svnadmin dump ti fornirà un singolo backup di file che puoi copiare nel nuovo sistema. Quindi puoi creare il nuovo repository (vuoto) e usare il svnadmin load , che essenzialmente riprodurrà tutti i commit insieme ai suoi metadati (autore, timestamp, ecc.).

Puoi leggere di più sulla procedura di dumping / caricamento qui:

http://svnbook.red-bean.com/en/1.8/svn.reposadmin.maint.html#svn.reposadmin.maint.migrate

Inoltre, se si esegue il svnadmin load , assicurarsi di utilizzare l’opzione --force-uuid , altrimenti le persone avranno problemi a passare al nuovo repository. Subversion utilizza un UUID per identificare internamente il repository e non ti consente di cambiare una copia funzionante in un altro repository.

Se non si dispone dell’accesso al filesystem, potrebbero esserci altre opzioni di terze parti (o si può scrivere qualcosa) per facilitare la migrazione: in sostanza si dovrebbe usare il log svn per riprodurre ogni revisione sul nuovo repository, e quindi correggere i metadati in seguito. Avrai bisogno degli script di hook pre-rev-change-change e post-revprop-change per farlo, che presume l’accesso al filesystem, quindi YMMV. Oppure, se non vuoi conservare la cronologia, puoi usare la tua copia di lavoro per importarla nel nuovo repository. Ma spero che questo non sia il caso.

rsvndump funzionato alla rsvndump con la migrazione di un repository da svnrepository.com a un server Ubuntu che controllo.

Come installare e utilizzare rsvndump su Ubuntu:

  1. Installa dipendenze mancanti (librerie “APR” e Subversion)

     sudo apt-get install apache2-threaded-dev sudo apt-get install libsvn-dev 
  2. Installa rsvndump

     wget http://prdownloads.sourceforge.net/rsvndump/rsvndump-0.5.5.tar.gz tar xvfz rsvndump-0.5.5.tar.gz cd rsvndump-0.5.5 ./configure make sudo make install 
  3. Scarica il repository SVN remoto in un file locale

     rsvndump http://my.svnrepository.com/svn/old_repo > old_repo_dump 
  4. Creare un nuovo repository e caricare il file di dump locale

     sudo svnadmin create /opt/subversion/my_new_rep sudo svnadmin load --force-uuid /opt/subversion/my_new_repo < old_repo_dump 

Puoi anche usare svnsync. Questo richiede solo l’accesso di sola lettura nel repository di origine

di più su svnbook

Estratto dal mio Blog-Note-to-myself
Ora puoi importare un file dump, ad es. Se stai migrando tra le versioni di macchine / subversion. ad esempio se avessi creato un file di dump dal repository di origine e caricato nel nuovo repository come mostrato di seguito.

 CmdShell> svnadmin dump D:\CoderZone2\svn-repos > ReposDump.dmp CmdShell> svnadmin load D:\CoderZone\svn-repos < ReposDump.dmp 

Lo strumento per farlo sarebbe

 svnadmin dump 

Ma affinché funzioni, è necessario l’accesso al filesystem al repository. E una volta ottenuto (e fornito il repository nel formato FSFS), è sufficiente copiare il repository nella sua nuova posizione (se è in formato BDB, si consiglia vivamente di scaricare / caricare).

Se non si dispone dell’accesso al filesystem, è necessario chiedere al proprio provider di repository di fornire il dump per conto dell’utente (e di fare in modo che elimini il proprio repository e sperare che siano conformi)

Fondamentalmente, ci sono molti modi per portare a termine il compito. L’argomento è trattato in modo approfondito in SVNBook | Migrazione dei dati del repository Altrove , quindi suggerisco di leggere la sezione del libro.

Ecco una breve descrizione delle tue opzioni:

  • Dipende dal tuo ambiente, ma c’è una grande possibilità che tu possa semplicemente copiare il repository sul nuovo server e funzionerà. È necessario rivedere gli script di hook del repository dopo aver copiato il repository per assicurarsi che funzionino come previsto.

  • È ansible utilizzare i svnadmin dump e svnadmin load per, ehm, generare il dump completo e quindi caricarlo su un altro repository su un altro server. Dovrai svnadmin create un nuovo repository pulito per caricare il dump in esso. Tieni presente che l’approccio riguarda solo la cronologia del repository e non sposta gli script di hook e i file di configurazione del repository ! Inoltre, è necessario aver letto l’accesso al filesystem al repository originale per scaricarlo.

  • Da Subversion 1.7, svnrdump strumento svnrdump è disponibile. In generale, imita la funzionalità di svnadmin dump e svnadmin load , ma opera da remoto. Non è necessario avere accesso in lettura / scrittura al filesystem agli archivi originali e di destinazione poiché lo strumento opera in remoto come client Subversion, ad esempio tramite protocollo HTTPS. Quindi è necessario avere accesso in lettura al repository originale e leggere / scrivere su quello di destinazione.

  • Un’altra opzione è usare il comando svnadmin hotcopy . Il comando viene principalmente utilizzato per scopi di backup, crea una copia completa del repository, inclusi la configurazione e gli script di hook. È quindi ansible spostare repository hotcopied su un altro server.

Puoi anche usare il comando svnadmin hotcopy :

 svnadmin hotcopy OLD_REPOS_PATH NEW_REPOS_PATH 

Richiede un backup completo dal repository, inclusi tutti gli hook, i file di configurazione, ecc.

Altro su SVN Book

Se non si ha accesso ai file nel repository, preferisco rsvndump (dump repository Subversion remoto) per creare il file dump.

Supponendo di disporre dei privilegi necessari per eseguire svnadmin, è necessario utilizzare i comandi dump e load .

Ho trovato un articolo su come spostare repository svn da un servizio di hosting a un altro, e come fare backup locali:

  1. Definisci dove archivierai i tuoi repository:

     mkdir ~/repo MYREPO=/home/me/someplace ## you should use full path here 
  2. Ora crea un repository svn vuoto con svnadmin create $MYREPO
  3. Crea un file hook e rendilo eseguibile:

     echo '#!/bin/sh' > $MYREPO/hooks/pre-revprop-change chmod +x $MYREPO/hooks/pre-revprop-change 
  4. Ora possiamo iniziare a importare il repository con svnsync , che inizializzerà un repository di destinazione per la sincronizzazione da un altro repository:

     svnsync init file://$MYREPO http://your.svn.repo.here/ 
  5. E il touch finale per trasferire tutte le revisioni in sospeso alla destinazione dalla sorgente con cui è stato inizializzato:

     svnsync sync file://$MYREPO 

Lì ora hai un repository svn locale nella directory ~/repo .

Fonte:

È ansible trovare aiuto nella migrazione dei repository SVN nel Capitolo 5. Amministrazione repository, Migrazione di un repository .

Questo approccio richiede l’accesso a svnadmin.