¿Cómo puedo mover una sola carpeta de un repositorio de Subversion a otro repositorio?


Tengo una carpeta "docs" en un repositorio de Subversion llamado "project". He llegado a la conclusión de que realmente debería mantenerse bajo un repositorio Subversion separado llamado "project_docs".

Me gustaría mover la carpeta "docs" ( y todas sus revisiones) al repositorio "project_docs". ¿Hay alguna manera de hacer esto?

Author: Peter Mortensen, 2009-01-06

6 answers

Si tiene acceso al repositorio en sí (no una copia de trabajo), debería poder volcar el repositorio actual, filtrarlo para incluir solo información sobre la carpeta docs y cargarlo en el otro repositorio.

Sería algo como esto:

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

Sin acceso al repositorio, no puede mantener el historial de revisiones y tiene que conformarse con copiar los archivos en el nuevo repositorio y confirmarlos.

 179
Author: Samuel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-04 13:36:23

Svndumpfilter tiene un defecto grave: si se copió un archivo o ruta de acceso de una ruta que está filtrando a otra en la que está filtrando, svndumpfilter no podrá completar el historial y el trabajo fallará.

Puede usar svndumpfilter2 si experimenta este problema.

 29
Author: compie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-02 09:00:58

Esto se discute en la documentación de SVN. Echa un vistazo a la sección Mantenimiento del repositorio en svndumpfilter... Describe específicamente cómo volcar proyectos fuera de un repositorio central y moverlos a repositorios nuevos y separados.

 6
Author: Adam Bellaire,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-04 23:13:22

No creo que pueda hacerlo de forma remota (es decir, sin una copia local). Pero esto debería funcionar: svn export la carpeta del servidor original, luego svn add a su nuevo repositorio.

Como:

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

Edit: D'oh, esto elimina la historia. Use svnadmin como Samuel describe .

 2
Author: Peter Stone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:14

Para referencia futura:

La documentación de SVN informa claramente:

Si planea editar manualmente el archivo de volcado para eliminar un directorio de nivel superior, asegúrese de que su editor no esté configurado para convertir automáticamente los caracteres de final de línea al formato nativo (por ejemplo, \r\n a \n), ya que el contenido no estará de acuerdo con los metadatos. Esto hará que el archivo de volcado sea inútil.

Use sed o Vim para sustituir el directorio de nivel superior, pero este nombre de directorio también estaba contenido dentro de un archivo de proyecto!!!! Esto causa un error SVN load checksum.

Así que cuando realice esta operación, no haga sustituciones de cadenas con sed de solo el nombre de la ruta.

Sustituye "Node-path: old_path" por "Node-path: new_path". Vea el capítulo 5 del libro de SVN "administración del repositorio" para más detalles.

 2
Author: nios,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-24 23:46:13

Traté de usar la respuesta aceptada, pero tenía un repositorio enorme y quería exportar un directorio pequeño, y no podía permitirme volcar todo el repositorio.

Entonces, solo exporté las revisiones donde mi directorio cambió (Esto puede no funcionar si el directorio que desea exportar tiene referencias a otros lugares en su repositorio).

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

Debe reemplazar la URL del repositorio (URL_to_docs), la ubicación en el servidor (/svn/old_repo) y la ruta a los documentos en el repositorio (path/to/docs)

Puede editar fácilmente su docs_only.dump si desea cambiar la ubicación de su directorio doc en su nuevo repositorio.

 1
Author: Renato,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-12 13:16:32