Migrazione di una parte del repository Subversion su un nuovo server e ripathing
-
28-10-2019 - |
Domanda
Sto tentando di migrare parte di un repository Subversion su un nuovo server Subversion.
http://server1/svn/repo1/path1/path2/path3
-> http://server2/svn/repo2/path3
Ho creato un dump completo tramite:
svnadmin dump repo1 > repo1.dump
Filtrato il dump tramite:
svndumpfilter include /path1/path2 --drop-empty-revs < repo1.dump > repo1_filtered.dump
Tramite Cygwin sed, sto sostituendo / path1 / path2:
sed -e 's,^Node-path: WM/BI,Node-path: ,' < repo1_filtered.dump > repo1_fixed.dump
Durante il tentativo di importare il dump in un repository nuovo / vuoto, ottengo il seguente errore:
<<< Started new transaction, based on original revision 32
* adding path : ...svnadmin: File already exists: filesystem 'bi\db', transaction '0-2', path ''
Credo che il problema sia che svndumpfilter includa il percorso / percorso1 / percorso2.In realtà, voglio solo i figli di / path1 / path2.Dopo aver eseguito sed, vicino all'inizio di repo1_fixed.dump, trovo:
2010-03-10T15:56*:59.595747Z
PROPS-END
Node-path:
Node-action: add
Node-kind: dir
Prop-content-length: 10
Content-length: 10
PROPS-END
La mia ipotesi è che il percorso del nodo vuoto sia la vera causa del problema.
Qualche suggerimento su come procedere?
Soluzione
Ho riprodotto il tuo problema abbastanza facilmente e sei sincero sulla tua analsi.Il problema è la revisione che crea la cartella di base.
Se rimuovi questa transazione dal tuo dump, viene importata correttamente
sed -e "s,^Node-path: rep1/rep3,Node-path: ," < temp_filtered.dump > temp_hacke.txt
L'ho fatto manualmente, è abbastanza facile: cerca solo le righe con Node-path vuoto: e rimuovi dal precedente "Revision-number:" al successivo "PROPS-END".Alcuni python / awk / perl potrebbero farlo (non ho provato).
Se non hai cose speciali in questa cartella (come le proprietà che si evolvono nel tempo), dovresti avere una sola occorrenza.
Un'altra soluzione è importare il tuo repository in una singola cartella invece che in una sottostruttura (in tal caso, cambia semplicemente la tua riga sed in, Node-path: newPath)
Nota che non conosco uno strumento che lo farebbe per te.