subversion - tortoise svn
¿Cómo exporto(y luego importo) un repositorio de Subversion? (11)
Estoy a punto de completar un proyecto en el que estaba usando un proveedor de SVN comercial para almacenar el código fuente. El servidor web que el cliente eligió incluye un repositorio como parte del paquete de alojamiento, por lo tanto, ahora que el proyecto ha finalizado, me gustaría reubicar el repositorio en su servidor web y descontinuar la cuenta comercial.
¿Cómo voy a hacer esto?
Básicamente, hay muchas maneras de lograr la tarea. El tema está cubierto en profundidad en http://svnbook.red-bean.com/en/1.8/svn.reposadmin.maint.html#svn.reposadmin.maint.migrate http://svnbook.red-bean.com/en/1.8/svn.reposadmin.maint.html#svn.reposadmin.maint.migrate , así que sugiero leer la sección del libro.
Aquí hay una breve descripción de sus opciones:
Depende de su entorno, pero existe una gran posibilidad de que simplemente copie el repositorio en el nuevo servidor y funcione. Debe revisar los scripts del gancho del repositorio después de copiar el repositorio para asegurarse de que funcionen como espera.
Puede usar los comandos
svnadmin dump
ysvnadmin load
para, ehm, generar un volcado completo y luego cargarlo en otro repositorio en otro servidor. Necesitarássvnadmin create
un nuevo repositorio limpio para cargar el volcado en él. ¡Tenga en cuenta que el enfoque trata solo con el historial del repositorio y no mueve las secuencias de comandos del gancho y los archivos de configuración del repositorio ! Además, debe haber leído el acceso al sistema de archivos al depósito original para volcarlo.Desde Subversion 1.7, la herramienta
svnrdump
está disponible. En términos generales, imita la funcionalidad desvnadmin load
svnadmin dump
ysvnadmin load
, pero funciona de forma remota. No es necesario que tenga acceso al sistema de archivos de lectura / escritura en los repositorios originales y de destino ya que la herramienta funciona de forma remota como el cliente de Subversion, por ejemplo, a través del protocolo HTTPS. Por lo tanto, debe tener acceso de lectura al repositorio original y leer / escribir en el destino.Otra opción es usar el comando
svnadmin hotcopy
. El comando se utiliza principalmente con fines de copia de seguridad, crea una copia completa del repositorio, incluida la configuración y los scripts de enlace. Puede mover el repositorio con copia de seguridad a otro servidor.
Encontré un artículo sobre cómo mover repositorios svn de un servicio de alojamiento a otro y cómo hacer copias de seguridad locales:
Defina dónde almacenará sus repositorios:
mkdir ~/repo MYREPO=/home/me/someplace ## you should use full path here
- Ahora crea un repositorio svn vacío con
svnadmin create $MYREPO
Crea un archivo hook y hazlo ejecutable:
echo ''#!/bin/sh'' > $MYREPO/hooks/pre-revprop-change chmod +x $MYREPO/hooks/pre-revprop-change
Ahora podemos comenzar a importar el repositorio con
svnsync
, que inicializará un repositorio de destino para la sincronización desde otro repositorio:svnsync init file://$MYREPO http://your.svn.repo.here/
Y el toque final para transferir todas las revisiones pendientes al destino desde la fuente con la que se inicializó:
svnsync sync file://$MYREPO
Ahora tiene un repositorio svn local en el directorio ~/repo
.
Fuente:
Extracto de mi Blog-Note-to-myself
Ahora puede importar un archivo de volcado, por ejemplo, si está migrando entre máquinas / versiones de subversión. por ejemplo, si he creado un archivo de volcado desde el repositorio de origen y lo cargo en el nuevo repositorio como se muestra a continuación.
CmdShell> svnadmin dump D:/CoderZone2/svn-repos > ReposDump.dmp
CmdShell> svnadmin load D:/CoderZone/svn-repos < ReposDump.dmp
La herramienta para hacer eso sería
svnadmin dump
Pero para que esto funcione, necesita el acceso al repositorio del sistema de archivos. Y una vez que tenga eso (y siempre que el repositorio esté en formato FSFS), puede simplemente copiar el repositorio a su nueva ubicación (si está en formato BDB, se recomienda encarecidamente descargar / cargar).
Si no tiene acceso al sistema de archivos, tendrá que pedirle a su proveedor de repositorio que le proporcione el volcado (y hacer que elimine su repositorio y espere que cumplan).
Puede encontrar ayuda sobre la migración de repositorios SVN en el Capítulo 5. Administración de repositorios, Migración de un repositorio .
Este enfoque requiere acceso a svnadmin.
Si desea mover el repositorio y mantener el historial, probablemente necesite acceso al sistema de archivos en ambos hosts. La solución más simple, si su backend es FSFS (el predeterminado en versiones recientes), es hacer una copia del sistema de archivos de toda la carpeta del repositorio.
Si tiene un backend de Berkley DB, si no está seguro de cuál es su backend, o si está cambiando los números de versión de SVN, querrá usar svnadmin para volcar su antiguo repositorio y cargarlo en su nuevo repositorio. repositorio. El uso de svnadmin dump
le dará una única copia de seguridad de archivo que puede copiar al nuevo sistema. Luego puede crear el nuevo repositorio (vacío) y usar svnadmin load
, que esencialmente reproducirá todos los commits junto con sus metadatos (autor, timestamp, etc.).
Puede leer más sobre el proceso de volcado / carga aquí:
http://svnbook.red-bean.com/en/1.8/svn.reposadmin.maint.html#svn.reposadmin.maint.migrate
Además, si svnadmin load
, asegúrese de utilizar la opción --force-uuid
, o de lo contrario las personas tendrán problemas para cambiar al nuevo repositorio. Subversion usa un UUID para identificar el repositorio internamente, y no le permitirá cambiar una copia de trabajo a un repositorio diferente.
Si no tiene acceso al sistema de archivos, puede que existan otras opciones de terceros (o puede escribir algo) para ayudarlo a migrar: esencialmente, tendría que usar el registro svn para reproducir cada revisión en el nuevo repositorio, y luego arregla los metadatos después. Necesitará los scripts de gancho pre-revprop-change y post-revprop-change en su lugar para hacer esto, que de alguna manera asume el acceso al sistema de archivos, entonces YMMV. O bien, si no desea conservar el historial, puede usar su copia de trabajo para importar al nuevo repositorio. Pero espero que este no sea el caso.
Si no tiene acceso de archivo al repositorio, prefiero rsvndump (volcado del repositorio de Subversion remoto) para crear el archivo de volcado.
También puede usar el comando svnadmin hotcopy
:
svnadmin hotcopy OLD_REPOS_PATH NEW_REPOS_PATH
Se necesita una copia de seguridad completa del repositorio, incluidos todos los enganches, archivos de configuración, etc.
También puedes usar svnsync. Esto solo requiere acceso de solo lectura en el repositorio fuente
rsvndump
funcionó muy bien para mí al migrar un repositorio de svnrepository.com a un servidor de Ubuntu que controlo.
Cómo instalar y usar rsvndump en Ubuntu:
Instalar dependencias faltantes ("APR" y bibliotecas de Subversion)
sudo apt-get install apache2-threaded-dev sudo apt-get install libsvn-dev
Instalar rsvndump
wget http://prdownloads.sourceforge.net/rsvndump/rsvndump-0.5.5.tar.gz tar xvfz rsvndump-0.5.5.tar.gz cd rsvndump-0.5.5 ./configure make sudo make install
Vuelque el repositorio SVN remoto a un archivo local
rsvndump http://my.svnrepository.com/svn/old_repo > old_repo_dump
Crea un nuevo repositorio y cárgalo en el archivo de volcado local
sudo svnadmin create /opt/subversion/my_new_rep sudo svnadmin load --force-uuid /opt/subversion/my_new_repo < old_repo_dump