Domanda

C'è un modo semplice per copiare una directory da un repository in un altro repository con la copia di tutta la storia?

È stato utile?

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:

  repository

Il 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 processo svnsync è 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 e svnadmin 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:

https://github.com/tonyduckles/svn2svn

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top