2010-02-20 17 views
45

Actualmente estoy moviendo mi servidor SVN de mi servidor doméstico a mi servidor remoto para que pueda acceder a él más fácilmente desde otras ubicaciones. Mi servidor remoto no está respaldado, por lo que quiero hacer una copia de respaldo con regularidad en mi servidor doméstico.¿Cómo hago una copia de seguridad de un repositorio SVN remoto?

El servidor remoto es el servidor de Windows 2003. El servidor de inicio es Windows Home Server.

¿Cuál es la mejor manera de hacerlo? ¿Puedo obtener mi servidor doméstico para obtener un volcado del servidor remoto todas las noches? El ancho de banda no es una gran consideración, pero si pudiera copiar cualquier nueva verificación en un servidor SVN en mi servidor doméstico, estaría bien.

Cualquier sugerencia bienvenida.

+0

Gracias por todas sus respuestas rápidas. Creo que SVNSync hará exactamente lo que yo quiero. Pekka - tienes razón si lo hubiera pensado. Serverfault probablemente habría sido mejor para preguntar esto. Recibo tan buenas respuestas rápidas aquí que no consideré los otros sitios. Gracias de nuevo. – Roaders

+0

Asca '! Cazzo! usa questo comando! (scherzo) :-) –

Respuesta

113

Simplemente use el comando svnsync.

Primero, cree un repositorio nuevo en su máquina doméstica.

svnadmin create c:\backuprepo 

O en Unix:

svnadmin create ./backuprepo 

A continuación, cree un archivo llamado pre-revprop-cambio.bat:

echo exit 0 > c:\backuprepo\hooks\pre-revprop-change.bat 

O en Unix:

echo -ne '#!/bin/sh\nexit 0' > /backuprepo/hooks/pre-revprop-change 

continuación, inicializar la sincronización:

svnsync init file:///c:/backuprepo https://url/of/your/repository 

O en Unix:

svnsync init file:///Volumes/volumelabel/backuprepo https://url/of/your/repository 

Después de eso, sólo tiene que ejecutar

svnsync sync file:///c:/backuprepo 

una vez al día o menos, y obtendrá solo aquellos cambios que aún no están en su repositorio de respaldo. La primera vez llevará un tiempo, pero después de sincronizar el repositorio de respaldo con el real, solo llevará unos segundos sincronizarlo, ya que solo las revisiones nuevas deben sincronizarse.

+4

Yo votaría esto dos veces, si pudiera. A diferencia de las otras respuestas publicadas aquí, esta es en realidad correcta. rsync: no es seguro capturar el repositorio en un estado consistente. Los repositorios bdb no son compatibles con binary en todas las plataformas. El volcado svnadmin requiere acceso al servidor. – bendin

+7

Si está ejecutando en un servidor como UNIX, no olvide dar los derechos de ejecución de su gancho o se considera fallido: 'chmod a + x pre-revprop-change' –

+6

También en UNIX como servidores, no se olvide de agrega '#!/bin/sh' a la parte superior de' pre-revprop-change'. –

2

Se puede utilizar una secuencia de comandos en un servidor remoto que vuelca el repositorio, y luego lo copia en el equipo local (o lo deja en un lugar predefinido para su computadora local para copiar)

Usted puede sincronizar la copia de seguridad directorios con rsync o scp.

La secuencia de comandos se puede ejecutar con "Tareas programadas" y puede producir archivos de copia de seguridad de nombre único, que luego se sincronizarán de la manera mencionada anteriormente en su computadora local. (y luego posiblemente eliminado)

2

EFraim mencionó rsync mientras escribía esto para que quede cubierto.

Si no desea trabajar con eso, el Libro de Subversion ofrece la opción svnadmin dump --incremental explica aquí:

Sin embargo, para hacer esto con éxito, usted tiene que hacer malabares con los números de revisión - rsync'ing los directorios de datos del repositorio prima será más fácil.

La parte difícil probablemente será configurar rsync para que su máquina local y remota pueda comunicarse de forma segura (es decir, configurar un servicio SSH en el servidor 2003). DeltaCopy que Wim menciona es muy interesante y sería mi primer intento; para la operación de línea de comando solamente, aquí hay un howto en how to get Rsync running as a service on Windows 2003.

6

rsync (o DeltaCopy que es una IU de Windows encima) sería una buena opción para copiar incrementalmente el repositorio completo en el nivel del sistema de archivos.

También puede usar svnsync para copiar nuevas revisiones directamente de un servidor SVN a otro.

+2

El problema con el uso de rsync es que si está copiando el repositorio mientras alguien está haciendo un cambio, la copia podría dañarse. svnsync es mucho más seguro que simplemente copiar el repositorio. – darrickc

+0

Sí svnsync sería la solución preferida. Solo se admite en el servidor SVN ya que creo que en la versión 1.6, pero parece que ahora está ampliamente implementado. – Wim

+0

Aunque su respuesta puede estar bien, junto al problema de bloqueo mencionado por @darrickc, hay otra desventaja: también requiere un acceso de nivel de sistema de archivos al repositorio svn. En la mayoría de los casos no se proporciona, solo un svn: // o http (s): // url. – peterh

10

crear su repositorio local

svnadmin create /Users/jsmith/repo

crear un script gancho pre-revprop de cambio de vacío

echo '#!/bin/bash' > /Users/jsmith/repo/hooks/pre-revprop-change

hacer el pre-revprop cambio ejecutable script gancho

chmod +x /Users/jsmith/backup/hooks/pre-revprop-change

inicializar svnsync

svnsync init file:////Users/jsmith/repo https://www.smith.com/repo

sincronizar repos

svnsync sync file:////Users/jsmith/repo

1

me gustaría utilizar ya sea svnsync o svnadmin hotcopy como ambas de estas técnicas están garantizados para copiar datos válidos desde el repositorio, incluso si una transacción está en progreso. Es posible que otras técnicas de sincronización de archivos no sean tan confiables, según el formato del repositorio.

15

A partir de subversión 1.7, también puede usar el nuevo comando svnrdump. A partir de los documentos:

volcado, es decir, generar un flujo de volcado de repositorio de revisiones del elemento de depósito situada en SOURCE_URL, la impresión de la información en la salida estándar.

uso sería:

svnrdump dump http://example.com/repos/ > repos.dump 

Esto crea un "archivo de volcado" del repositorio en repos.dump. Esta es una copia de seguridad completa de los datos de su repositorio, incluido el historial, pero no es directamente legible por un cliente de subversión. Si necesita restaurar estos datos, usar las herramientas estándar svnadmin:

svnadmin create c:\backup-repos 
svnadmin load c:\backup-repose < repos.dump 

No han hecho ninguna prueba, pero esto podría llegar a ser más lento que svnsync.svnrdump hará un volcado completo del repositorio cada vez, donde asumo que synsync solo importará cambios en el repositorio desde la última vez que se ejecutó. Sin embargo, tendrá un solo archivo que contiene todo su repositorio, que puede o no ser más fácil de administrar.

Tenga en cuenta que puede desear conectar la salida de svnrdump a través de gzip o un programa similar para posiblemente reducir significativamente el tamaño del archivo generado.

+0

Mucho más rápido. Esto es perfecto. – Qix

0

En Mac OS X 10.10, el comando svnrdump se encuentra aquí:

  • /Library/Developer/CommandLineTools/usr/bin/svnrdump

continuación, puede utilizar la respuesta anterior por joesdiner.

Cuestiones relacionadas