Come posso spostare una singola cartella da un repository Subversion a un altro repository?

StackOverflow https://stackoverflow.com/questions/417726

Domanda

Ho un " docs " cartella in un repository Subversion denominato " project " ;. Sono giunto alla conclusione che dovrebbe davvero essere tenuto in un repository Subversion separato chiamato " project_docs " ;.

Vorrei spostare il " docs " cartella ( e tutte le sue revisioni ) in " project_docs " repository. C'è un modo per farlo?

È stato utile?

Soluzione

Se hai accesso al repository stesso (non una copia funzionante), dovresti essere in grado di scaricare il repository corrente, filtrarlo in modo da includere solo le informazioni sulla cartella documenti e caricarlo nell'altro repository.

Sarebbe qualcosa del genere:

svnadmin dump /svn/old_repos > ./repository.dump
svndumpfilter include path/to/docs --drop-empty-revs --renumber-revs --preserve-revprops < ./repository.dump > ./docs_only.dump
svnadmin load /svn/new_repos < ./docs_only.dump

Senza accesso al repository, non è possibile mantenere la cronologia delle revisioni e si deve accontentarsi di copiare i file nel nuovo repository e impegnarli.

Altri suggerimenti

svndumpfilter ha un grave difetto: se un file o un percorso è stato copiato da un percorso che stai filtrando in uno che stai filtrando, svndumpfilter non sarà in grado di compilare la cronologia e il lavoro non riuscirà.

Puoi usare svndumpfilter2 se riscontri questo problema.

Questo è discusso nella documentazione SVN. Consulta la sezione Manutenzione del repository su svndumpfilter ... Descrive in modo specifico come scaricare i progetti da un repository centrale e spostarli in nuovi repository separati.

Non credo che tu possa farlo da remoto (cioè senza una copia locale). Ma questo dovrebbe funzionare: svn export la cartella dal server originale, quindi svn add nel nuovo repository.

Come:

$ svn checkout svn://example.net/newrepo .
$ svn export svn://example.com/oldrepo/mydir ./mydir
$ svn add ./mydir; svn commit

Modifica: D'oh, questo lascia cadere la storia. Usa svnadmin come Samuel descrive .

Per riferimento futuro:

La documentazione SVN riporta chiaramente:

Se prevedi di modificare manualmente il file di dump per rimuovere una directory di livello superiore, assicurati che l'editor non sia impostato per convertire automaticamente i caratteri di fine riga nel formato nativo (ad esempio, \ r \ n in \ n), poiché il contenuto non sarà quindi d'accordo con i metadati. Ciò renderà inutile il file di dump.

Usa sed o Vim per sostituire la directory di livello superiore, ma questo nome di directory era contenuto anche all'interno di un file di progetto !!!! Ciò causa un errore di checksum del caricamento SVN.

Quindi quando esegui questa operazione, non effettuare sostituzioni di stringhe con sed solo del nome del percorso.

Sostituisci “Node-path: old_path” con “Node-path: new_path”. Vedere il capitolo 5 "Amministrazione del repository" del libro SVN per maggiori dettagli.

Ho provato a usare la risposta accettata, ma avevo un enorme repository e volevo esportare una piccola directory e non potevo permettermi di scaricare l'intero repository.

Quindi, ho esportato solo le revisioni in cui è cambiata la mia directory (questo potrebbe non funzionare se la directory che si desidera esportare ha riferimenti ad altre posizioni nel repository).

svn log URL_to_docs | awk '/^r/{gsub(/^r/,"",$1);print $1}' > revisions.txt
#tac for revisions in reverse (oldest revision first)
tac revisions.txt | while read line; do svnadmin dump /svn/old_repo -r$line >> ./docs_revisions.dump ; done

#You don't have to filter if you commited only files in your directory docs in your exported revisions
svndumpfilter include path/to/docs --drop-empty-revs --renumber-revs --preserve-revprops < ./docs_revisions.dump > ./docs_only.dump

svnadmin load /svn/new_repos < ./docs_only.dump

È necessario sostituire l'URL del repository ( URL_to_docs ), la posizione nel server ( / svn / old_repo ) e il percorso dei documenti nel repository ( path / to / docs )

Puoi facilmente modificare il tuo docs_only.dump se vuoi cambiare la posizione della tua directory doc nel tuo nuovo repository.

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