¿Cómo puedo migrar un repositorio SVN a otro repositorio SVN?


¿Existe una forma sencilla de copiar un directorio de un repositorio a otro repositorio copiando todo el historial?

Author: Peter Mortensen, 2009-06-02

9 answers

La forma más sencilla es usar:

svnadmin dump path/to/repos > repos.out

Esto creará un formato portable para su repositorio (con historial) en el archivo repos.out. A continuación, puede utilizar

svnadmin load path/to/newrepos < repos.out

Para cargar su repositorio' volcado ' al nuevo o existente.

Capítulo 5. Mantenimiento del Repositorio - > Migrar datos del Repositorio en otro lugar tiene esta nota sobre el uso de svnadmin dump a partir de la versión 1.7:

El formato de volcado del repositorio Subversion describe el repositorio versionado solo cambios. Lo hará no llevar ninguna información sobre uncommitted transacciones, bloqueos de usuario en rutas del sistema de archivos, repositorio o servidor personalizaciones de configuración (incluidos los scripts de gancho), etc.

 72
Author: Adam,
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-18 21:20:09

Como se sugiere en el libro de Subversion :

svnadmin dump path/to/repos_src \
    | svndumpfilter include path/inside/svn/to/directory \
    | svnadmin load path/to/repos_dst

Con un ejemplo:

svnadmin dump /var/lib/svn/old_repo \
    | svndumpfilter include trunk/my_project/common_dir \
    | svnadmin load /var/lib/svn/new_repo
 33
Author: Steve Schnepp,
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-18 21:18:27

Si no desea historial, puede usar svn export para obtener una carpeta limpia sin las carpetas .svn y luego svn import en su otro repositorio.

Con el historial, tendría que usar el svnadmin dump. Entonces usarías svndumpfilter para filtrar solo las partes o rutas que desea usar antes de usar svnadmin load.

Temas a leer:

 23
Author: crashmstr,
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
2013-04-09 10:27:26

Utilice el svnsync - Repositorio de Subversion Mirroring orden:

svnsync es la herramienta de reflejo del repositorio remoto de Subversion. En pocas palabras, le permite reproducir las revisiones de un repositorio en otro.

La documentación de Subversion para el comando svnsync tiene la siguiente advertencia (a partir de la versión 1.7) que implica que una vez que se usen otros comandos SVN para modificar un repositorio mirror, svnsync no debería usarse con ese mirror en particular de nuevo:

svnsync es muy sensible a los cambios realizados en el repositorio mirror eso no fue hecho como parte de una operación de espejo. Para evitar esto de suceder, es mejor si el proceso svnsync es el único proceso se permite modificar el repositorio mirror.

 7
Author: Tomas Andrle,
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-27 09:26:35

Puede crear un archivo de volcado usando svnadmin dump, luego importarlo a un nuevo repositorio con svnadmin load.

 3
Author: tomoe,
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
2013-04-09 10:26:19

En la versión 1.7 de Subversion hay un nuevo comando, svnrdump que se puede usar para acceder a un repositorio remoto y generar el mismo formato de salida de volcado que se genera con el comando svnadmin dump. Esto le permite usar svnrdump con svnadmin load para transferir un repositorio de Subversion.

Ver svnrdump-Remote Subversion Repository Data Migration que tiene una explicación del nuevo comando.

En el Capítulo 5 del libro rojo, la sección Migrando los Datos del Repositorio en otro lugar tiene una subsección Migración de datos del repositorio utilizando svnrdump que menciona:

La diferencia primaria[entre svnrdump y svnadmin dump] es que en lugar de requerir acceso directo al repositorio, svnrdump opera de forma remota, utilizando el mismo Acceso al Repositorio (RA) protocolos que hace el cliente Subversion. Como tal, es posible que necesite proporcionar credenciales de autenticación. Además, sus interacciones remotas [sic] están sujetos a cualquier limitación de autorización configurada en el Servidor Subversion.

También asumiría que las limitaciones de svnadmin dump con respecto a las personalizaciones de configuración del servidor, como los hooks no se pueden transferir, también se aplicarían a svnrdump.

 3
Author: Richard Chambers,
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-07-10 04:11:28

Creo que se debe decir que el archivo de volcado creado mediante la utilización de

    svnadmin dump path/to/repos > dumpfile

Se puede crear (desde svn 1.7 y adelante) usando el comando

   svnrdump dump url_to_repos > dumpfile

Esto es útil cuando se hace desde un equipo remoto y no desde el servidor.

 2
Author: Efstathios Oikonomou,
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-02-01 10:29:18

En caso de que esto ayude a otros, hay svn2svn para reproducir conjuntos de cambios de un repositorio Subversion a otro:

Https://github.com/tonyduckles/svn2svn

 0
Author: user2387519,
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
2018-01-04 17:23:09

Para migrar el repositorio de un servidor a otra versión, siga los pasos que debe seguir.

Paso 1: Descarga todas las versiones del repositorio en un archivo de volcado. Es posible que tenga miles de versiones en el repositorio existente. Por lo tanto, puede crear un archivo de volcado utilizando el siguiente script.

Dump.sh

# Here “i” is the version starting number, and “j” is the maximum version number of your existing #repository.
j=4999;
for ((i=0;i<=$j;i++));
do
   # your-unix-command-here
   echo $i
   svnadmin dump <old_server_repository_location > -r $i  –incremental > <dump_location>/$i.dump
done

En el script anterior puede obtener un volcado completo del repositorio antiguo dependiendo de la disponibilidad de espacio, o puede tomar el volcado en un corto intervalo (es decir, de 0-5000, luego de 5001-10000 y así sucesivamente).

Paso 2: Ejecute el script anterior utilizando el siguiente comando. Dependiendo de la versión del kernel, necesita ejecutar cualquiera de las dos consultas siguientes.

$ bash dump.sh > stdout.sh
$ ./sh dump.sh > stdout.sh

Esto escribirá todos los comandos que tuvo que ejecutar usando el comando anterior en stdout.sh archivo. Puede rastrear este archivo para su referencia futura.

Paso 3: Compruebe si el firewall está abierto para el puerto número 22 entre el servidor antiguo y el nuevo. Si eso es no está abierto, luego pídale a su administrador que lo haga disponible.

Paso 4: Ahora copie todos los archivos de volcado generados desde el antiguo repositorio SVN al nuevo servidor usando el siguiente comando.

$ sftp xxxx@<new_server>
Connecting to <new_server>…
Password:
sftp> mput *.dump <new_server>/dump_location

En el comando anterior, xxxx es el usuario que está haciendo la operación. En el proceso de hacer sftp está copiando los archivos de volcado del servidor antiguo al nuevo servidor.

Paso 5: Crear un nuevo repositorio para el nuevo Servidor

$ svnadmin create <new_repository>

Paso 6: Ahora use el siguiente script para cargar todo los archivos de volcado.

Load.sh

# Here “i” is the version starting number, and “j” is the maximum version number of your existing #repository.
j=4999;
for ((i=0;i<=$j;i++));
do
   # your-unix-command-here
   echo $i
   svnadmin load –bypass-prop-validation <new_repository> < dump_location /$i.dump
done

Simplemente siguiendo los seis sencillos pasos anteriores, podrá migrar su repositorio existente a un nuevo repositorio. A través de este proceso no necesita preocuparse por las revisiones dañadas de su repositorio existente.

 -2
Author: user3767376,
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-29 15:33:55