Come faccio a migrare un repository SVN ad un altro repository SVN?
-
06-09-2019 - |
Domanda
C'è un modo semplice per copiare una directory da un repository in un altro repository con la copia di tutta la storia?
Soluzione
Il modo più semplice sta usando:
svnadmin dump path/to/repos > repos.out
Questo creerà un formato portatile per il repository (con la storia) nel file repos.out
. È quindi possibile utilizzare
svnadmin load path/to/newrepos < repos.out
per caricare il repository 'scaricato' al nuovo o già esistente.
Capitolo 5. Repository Manutenzione -> Migrazione Data Repository Altrove ha questa nota sull'utilizzo svnadmin dump
a partire dalla versione 1.7:
repositoryIl formato discarica repository Subversion descrive di versione solo le modifiche. Non porterà tutte le informazioni su uncommitted transazioni, serrature utente su percorsi di file system, repository o un server personalizzazioni configurazione (compresi script di aggancio), e così via.
Altri suggerimenti
Come suggerito nella Subversion libro :
svnadmin dump path/to/repos_src \
| svndumpfilter include path/inside/svn/to/directory \
| svnadmin load path/to/repos_dst
Con un esempio:
svnadmin dump /var/lib/svn/old_repo \
| svndumpfilter include trunk/my_project/common_dir \
| svnadmin load /var/lib/svn/new_repo
Se non si desidera che la storia, è possibile utilizzare svn export
per ottenere una cartella pulita senza le cartelle .svn
e poi svn import
nella vostra altri repository.
Con la storia, si avrebbe bisogno di utilizzare il svnadmin dump
. Si potrebbe quindi utilizzare svndumpfilter
per filtrare solo le parti o percorsi che si desidera utilizzare prima di utilizzare svnadmin load
.
Argomenti di leggere:
Utilizza il svnsync
- Subversion Repository Mirroring comando:
svnsync
è lo strumento mirroring repository remoto Subversion. In parole povere, consente di riprodurre le revisioni di un repository in un altro.
La documentazione Subversion per il comando svnsync
ha il seguente avviso (a partire dalla versione 1.7) il che implica che una volta alcuni altri comandi SVN vengono utilizzati per modificare un repository specchio, svnsync
non deve essere usato con quel particolare specchio di nuovo:
svnsync
è molto sensibile alle modifiche apportate nel repository specchio che non sono stati realizzati come parte di un'operazione di mirroring. Per evitare che questo accada, è meglio se il processosvnsync
è l'unico processo permesso di modificare il repository specchio.
In Subversion versione 1.7 c'è un nuovo comando, svnrdump
che può essere utilizzato per accedere un repository remoto e generare la stessa uscita formato dump come è generato dal comando svnadmin dump
. Questo consente di utilizzare svnrdump
con svnadmin load
per trasferire un repository Subversion.
svnrdump-Remote Subversion Migrazione Data Repository che ha una spiegazione del nuovo comando.
Nel capitolo 5 del libro rosso, la sezione migrazione Data Repository Altrove ha una sotto-sezione migrazione dei dati Repository usando svnrdump
che cita:
La differenza principale [fra
svnrdump
esvnadmin dump
] è che invece di richiedere l'accesso diretto al repository,svnrdump
opera in remoto, utilizzando lo stesso accesso Repository (RA) protocolli che il client di Subversion fa. Come tale, potrebbe essere necessario fornire le credenziali di autenticazione. Inoltre, l'interations remoti [Sic] sono soggetti ad alcuna limitazione di autorizzazione configurati sul server Subversion.
avrei anche assumere che le limitazioni di svnadmin dump
relative personalizzazioni configurazione del server come ganci non possono essere trasferiti si applicano anche ai svnrdump
.
È possibile creare un file di dump utilizzando svnadmin dump
, quindi importare in un nuovo repository con svnadmin load
.
Credo che sia opportuno precisare che il file di dettagli creato da utilizzando
svnadmin dump path/to/repos > dumpfile
È possibile creare (da svn 1.7 e indietro) usando il comando
svnrdump dump url_to_repos > dumpfile
Questa funzione è utile quando è fatto da un computer remoto e non il server.
Nel caso in cui questo aiuta gli altri, v'è svn2svn di ripetere di modifiche da un repository Subversion a un altro:
Per migrare il repository da un server all'altro versione seguenti sono i punti è necessario seguire.
Passaggio 1: Dump tutte le versioni del repository in un file di dump. Si potrebbe avere migliaia di versioni nel repository esistente. Così si può creare un file di dettagli utilizzando il seguente script.
dump.sh
# Here “i” is the version starting number, and “j” is the maximum version number of your existing #repository.
j=4999;
for ((i=0;i<=$j;i++));
do
# your-unix-command-here
echo $i
svnadmin dump <old_server_repository_location > -r $i –incremental > <dump_location>/$i.dump
done
Nello script precedente si potrebbe ottenere un dump completo del vecchio repository a seconda della disponibilità di spazio, oppure si può prendere la discarica in un breve intervallo (cioè 0-5000, quindi 5.001-10.000 e così via).
Passaggio 2: Eseguire lo script di cui sopra con il comando di seguito. A seconda della versione del kernel è necessario eseguire una delle operazioni di seguito due query.
$ bash dump.sh > stdout.sh
$ ./sh dump.sh > stdout.sh
Questa scriverà tutti i comandi si doveva eseguire utilizzando il comando sopra in file di stdout.sh. È possibile tenere traccia di questo file per il riferimento futuro.
Passaggio 3: Verificare se il firewall è aperto per il numero di porta 22 tra il vecchio e il nuovo server. Se questo non è aperto, quindi chiedere all'amministratore di rendere questa disposizione.
Passo 4:. Ora copiare tutti i file di dump generati dal vecchio repository SVN al nuovo server utilizzando il comando seguente
$ sftp xxxx@<new_server>
Connecting to <new_server>…
Password:
sftp> mput *.dump <new_server>/dump_location
Nel comando precedente, xxxx
è l'utente che sta facendo l'operazione. Nel processo di fare SFTP si copiano i file di dump dal vecchio server al nuovo server.
Passo 5: Creare un nuovo repository per il nuovo server
$ svnadmin create <new_repository>
Passo 6:. Ora utilizzare lo script seguente per caricare tutti i file dump
load.sh
# Here “i” is the version starting number, and “j” is the maximum version number of your existing #repository.
j=4999;
for ((i=0;i<=$j;i++));
do
# your-unix-command-here
echo $i
svnadmin load –bypass-prop-validation <new_repository> < dump_location /$i.dump
done
Proprio seguendo le suddette sei semplici passi si sarà in grado di migrare il repository esistente in un nuovo repository. Attraverso questo processo non c'è bisogno di preoccuparsi per le revisioni danneggiati della vostra repository esistente.