2009-01-26 1129 views
30

Actualmente tengo un repositorio de nivel raíz establecido para cada proyecto, así:¿Puedo trasladar un repositorio de Subversion existente a un nuevo repositorio principal (y conservar el historial)?

Project1 
Project2 
Project3 
Project5 
Project5 

me gustaría reorganizar esto para que en lugar de un repositorio para cada proyecto individual, sólo tengo uno para cada agrupación lógica, y luego los proyectos serían sólo las carpetas dentro de esos grupos repositorios '', por ejemplo:

WebSites 
    Project1 
    Project2 
DesktopApps 
    Project3 
Libraries 
    Project4 
    Project5 

¿Es esta del todo posible, manteniendo la historia de los repositorios existentes? He buscado bastante, pero todo lo que puedo encontrar es información sobre mover carpetas dentro del mismo repositorio y mover las carpetas de un repositorio a un nuevo repositorio.

De todos modos es solo para cosas personales, así que no es el fin del mundo si es solo un 'no' directo, pero sería bueno saberlo, así que no me estoy golpeando la cabeza contra la pared :)

Respuesta

25

Usted debe ser capaz de volcar, a continuación, volver a cargarla en un subdirectorio de un nuevo repositorio:

svnadmin dump http://oldrepo/> mydump

svnadmin carga --parent-dir mi/nueva/carpeta http://newrepo/ < mydump

+0

hotcopy no es una buena idea si está importando los archivos en un repositorio ya existente donde desea mantener el historial de lo que haya antes de la importación. "svnadmin dump/load" es el camino a seguir. –

+0

Nunca he confiado en la copia de seguridad para hacer nada ... Prefiero la red de seguridad de volcar/cargar ... simplemente dándole algunas opciones :) –

+0

Excelente, exactamente lo que estaba buscando, gracias. –

1

Puede usar tailor para importar las revisiones al nuevo repositorio. Comprueba el código del repositorio anterior una revisión tras otra y lo confirma en el nuevo repositorio.

Esto también se puede utilizar para convertir el historial de un tipo de sistema de control de versiones en otro.

archivo de proyecto

Una medida se vería así:

[DEFAULT] 
root-directory = /var/tmp/tailor 
verbose = true 

[myproject] 
source = svn:oldrepo 
target = svn:newrepo 
start-revision = INITIAL 

[svn:oldrepo] 
repository = svn://oldhost.example.com/svnroot 
module = trunk 
subdir = repo-in 

[svn:newrepo] 
repository = svn://newhost.example.com/some/path 
module = trunk 
subdir = repo-out 

Si este archivo se llama settings.cfg, esto va a copiar /trunk del viejo Revison repositorio Revison a la nueva ubicación:

tailor --configfile=settings.cfg myproject 

El repositorio de destino ya debe existir y probablemente debería tener un subdirectorio trunk vacío.

+0

En teoría también debería ser posible usar sastre para hacer svn a svn, pero estoy teniendo problemas para hacerlo funcionar. ¿Por qué querrías hacer eso? Porque el volcado de svnadmin solo funcionará en los repositorios locales. No puede volcar un repositorio en una URL. – Baxissimo

+0

Agregué una configuración de ejemplo que funciona para svn-> svn copy. Espero que pueda adaptarlo para su caso con algunos ajustes ... – sth

11
+1

[Las respuestas solo de enlace no son buenas respuestas] (http://meta.stackoverflow.com/tags/link-only-answers/info). –

+3

No fue solo una respuesta de enlace. Karsten le hizo saber que era el libro svn y le dio el título del capítulo. Fue escueto y relevante. Es como "solo un enlace" como tu comentario. – bryjohns

1

Dado que la respuesta aceptada es incompleta y no se ha corregido, así es como hacerlo en realidad.

(1) Su repositorio de origen es un repositorio de proyecto único, con el directorio de nivel superior foo. Vaya a su antiguo servidor y crear un archivo de volcado:

[old-server]$ svnadmin dump /path/to/old-repo > foo.dump 

(2) tu repositorio de destino ya contiene dos proyectos, con directorios de nivel superior bar y baz, y es por lo http://new-server/svn.Ahora crear una foo nivel superior additonal:

[client]$ svn ls http://new-server/svn/ 
bar/ 
baz/ 
[client]$ svn mkdir -m "Adding new foo project" http://new-server/svn/foo 
[client]$ svn ls http://new-server/svn/ 
bar/ 
baz/ 
foo/ 

(3) En el nuevo servidor, el repositorio está en /path/to/new-repo (que es lo que http://new-server/svn/ mapas a). Tenga en cuenta que el svn mkdir anterior no creó realmente un nuevo directorio en /path/to/new-repo; simplemente cambió la base de datos. Vaya al nuevo servidor y

[new-server]$ svnadmin load /path/to/new-repo --parent-dir foo < foo.dump 

Hecho, con un historial completo. Ahora puedes leer la foo como:

[client]$ svn co http://new-server/svn/foo foo 

Si esta es la primera vez que has hecho un svnadmin, es posible que se obtienen errores de permisos de archivo (txn-current-lock/etc) si, por ejemplo, el repositorio es propiedad de apache, y usted no está en el grupo apache. La solución más fácil es agregarse al grupo apache.

Cuestiones relacionadas