2009-01-06 15 views

Respuesta

177

Si tiene acceso al repositorio (no a una copia de trabajo), debe poder volcar el repositorio actual, filtrarlo para incluir solo información sobre la carpeta de documentos 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 se puede mantener el historial de revisiones y hay que conformarse con la copia de los archivos en el nuevo repositorio y cometer.

+1

Buen ejemplo. Tenga en cuenta que, como se indica en la documentación a la que me he vinculado, esta solución volverá a enumerar todas las revisiones para que no haya "vacíos". Algo a tener en cuenta si hace referencia a las revisiones de documentos en cualquier otro lugar. –

+1

Sugerí la eliminación de las revisiones vacías para evitar agregar un montón de revisiones vacías al repositorio de destino, lo que probablemente confundiría a cualquiera que no supiera sobre la carga. Dado que --preserve-revprops mantendrá los mensajes de confirmación en lugar de usar el predeterminado de carga. – Samuel

+0

Gracias, tengo acceso al repositorio, así que daré una oportunidad. – leftend

2

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 en su nuevo repositorio.

igual:

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

Editar: D'oh, esto cae por la historia. Use svnadmin como Samuel describes.

+3

esto no conserva todas las revisiones, que necesita conservar ... –

+3

Sin embargo, no puede mantener las revisiones sin tener acceso al repositorio. Si solo puede tener una copia de trabajo, esto es lo mejor que puede hacer. – Samuel

5

Esto se explica en la documentación de SVN. Consulte la sección Repository Maintenance en svndumpfilter ... Describe específicamente cómo volcar proyectos de un repositorio central y moverlos a repositorios nuevos y separados.

28

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

Puede utilizar svndumpfilter2 si experimenta este problema.

+3

Aquí hay un enlace mejor para svndumpfilter2: http://svn.tartarus.org/sgt/svn-tools/svndumpfilter2 – bmaupin

+0

En ese caso, puede agregar la ruta requerida a la lista ... siendo lo más específica posible ... y luego eliminar esas entradas del proyecto después de la importación. –

2

Para futuras consultas:

documentación de SVN informa claramente:

Si usted planea en la edición manual del archivo de volcado para eliminar un directorio de nivel superior, asegúrese de que su editor no está configurado para convertir automáticamente final de caracteres 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.

Utilice sed o Vim para sustituir el directorio de nivel superior, pero este nombre de directorio también estaba dentro de un archivo de proyecto !!!! Esto causa un error de suma de comprobación de carga SVN.

Por lo tanto, cuando realiza esta operación, no realice sustituciones de cadenas con sed de solo el nombre de ruta.

Sustituya "Node-path: old_path" con "Node-path: new_path". Consulte el capítulo 5 del SVN "Administración de repositorios" para más detalles.

1

Intenté utilizar la respuesta aceptada, pero tenía un gran repositorio y quería exportar un pequeño directorio, y no podía permitir el volcado de todo el repositorio.

Por lo tanto, solo exporté las revisiones en las que 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 de su cesión temporal (URL_to_docs), ubicación en el servidor (/svn/old_repo) y la ruta de acceso a 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.

Cuestiones relacionadas