tutorial - ¿Cómo migro un repositorio SVN a otro repositorio SVN?
svn tutorial español (9)
¿Existe una manera simple de copiar un directorio de un repositorio a otro repositorio con la copia de todo el historial?
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
Creo que debería decirse que el archivo de volcado creado al utilizar
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 una computadora remota y no desde el servidor.
En Subversion versión 1.7 hay un nuevo comando, svnrdump
, que se puede usar para acceder a un repositorio remoto y generar el mismo resultado de formato de volcado generado por el comando svnadmin dump
. Esto le permite usar svnrdump
con svnadmin load
para transferir un repositorio de Subversion.
Consulte 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 Migración de datos del repositorio en otro lugar tiene una subsección Migración de datos del repositorio usando svnrdump
que menciona:
La principal diferencia [entre
svnrdump
ysvnadmin dump
] es que, en lugar de requerir acceso directo al repositorio,svnrdump
funciona de forma remota, utilizando los mismos protocolos de acceso al repositorio (RA) que el cliente de Subversion. Como tal, es posible que deba proporcionar credenciales de autenticación. Además, sus interacciones remotas [sic] están sujetas a cualquier limitación de autorización configurada en el servidor de Subversion.
También supondría que las limitaciones de svnadmin dump
relación con las personalizaciones de configuración del servidor, como los hooks, no se pueden transferir también se aplicarán a svnrdump
.
En caso de que esto ayude a otros, hay svn2svn para reproducir conjuntos de cambios de un repositorio de Subversion a otro:
La forma más simple es usar:
svnadmin dump path/to/repos > repos.out
Esto creará un formato portátil para su repositorio (con historial) en el archivo repos.out
. Puedes usar
svnadmin load path/to/newrepos < repos.out
para cargar su repositorio "volcado" a uno nuevo o existente.
Capítulo 5. Mantenimiento de repositorio -> Migración de datos de repositorio En otro lugar tiene esta nota sobre el uso de svnadmin dump
partir de la versión 1.7:
El formato de volcado del depósito de Subversion solo describe los cambios del repositorio versionado. No incluirá ninguna información sobre transacciones no confirmadas, bloqueos de usuario en las rutas del sistema de archivos, personalizaciones de configuración del servidor o repositorio (incluidas las secuencias de comandos de gancho), etc.
Para migrar el repositorio de un servidor a otra versión, a continuación se detallan los pasos que debe seguir.
Paso 1: volcar todas las versiones del repositorio en un archivo de volcado. Es posible que tenga miles de versiones en el repositorio existente. Entonces puede crear un archivo de volcado usando la siguiente secuencia de comandos.
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, es posible que obtenga un volcado completo del repositorio anterior según la disponibilidad de espacio, o puede realizar el volcado en un intervalo breve (es decir, de 0 a 5000, luego de 5001 a 10000, etc.).
Paso 2: Ejecuta el script anterior usando el siguiente comando. Dependiendo de la versión del kernel, necesita ejecutar cualquiera de las siguientes dos consultas.
$ bash dump.sh > stdout.sh
$ ./sh dump.sh > stdout.sh
Esto escribirá todos los comandos que tuvo que ejecutar utilizando el comando anterior en el archivo stdout.sh. Puede rastrear este archivo para su futura referencia.
Paso 3: compruebe si el firewall está abierto para el número de puerto 22 entre el servidor antiguo y el nuevo. Si no está abierto, solicite a su administrador que lo ponga a disposición.
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 anterior al servidor nuevo.
Paso 5: crea un nuevo repositorio para el nuevo servidor
$ svnadmin create <new_repository>
Paso 6: Ahora usa la secuencia de comandos siguiente para cargar todos 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 simples pasos anteriores, podrá migrar su repositorio existente a un nuevo repositorio. A través de este proceso, no necesita preocuparse por las revisiones corruptas de su repositorio existente.
Puede crear un archivo de volcado usando svnadmin dump
, luego importar a un nuevo repositorio con svnadmin load
.
Si no desea el historial, puede usar svn export
para obtener una carpeta limpia sin las carpetas .svn
y luego svn import
a su otro repositorio.
Con la historia, necesitarías usar el svnadmin dump
. Luego usaría svndumpfilter
para filtrar solo las partes o rutas que quiera usar antes de usar svnadmin load
.
Temas para leer:
Use el svnsync
- Subversion Repository Mirroring :
svnsync
es la herramienta de creación 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), lo que implica que una vez que se utilizan otros comandos SVN para modificar un repositorio espejo, svnsync
no se debe volver a utilizar con ese espejo en particular:
svnsync
es muy sensible a los cambios realizados en el repositorio espejo que no se realizaron como parte de una operación de duplicación. Para evitar que esto suceda, es mejor si el procesosvnsync
es el único proceso permitido para modificar el repositorio espejo.