jueves, 13 de agosto de 2009

Sincronizar el repositorio subversion de Google Code con uno local

   Cuando das de alta un proyecto en Google Code tienes acceso a un repositorio propio de subversion con 1GB de espacio para subir tu código. Según pasa el tiempo y empiezas a subir código, te das cuenta que te gustaría tener una copia de tu repositorio por si pasa algo. Además, también es muy útil cuando quieres navegar por él, consultar las revisiones de los archivos,... puesto que una copia local funciona infinitamente más rápido que el servidor remoto.

   Así, estuve investigando cómo sincronizar mi repositorio de Mufly con uno local. La respuesta la encontré en el wiki de Google Code, concretamente en How do I download my Subversion history?. Viene muy bien explicado pero hay un pequeño detalle que no cuentan y hasta que me di cuenta de él perdí bastante tiempo haciendo pruebas. Los pasos a seguir son:
  • Crear el repositorio:
    ivan@doraemon:~$ svnadmin create svn_mufly_mirror
  • Crear el archivo hooks/pre-revprop-change con el siguiente contenido
    ivan@doraemon:~$ vi svn_mufly_mirror/hooks/pre-revprop-change
    #!/bin/bash
    exit 0
    Y ahí es donde estaba el problema. En el wiki sólo cuentan que devuelva 0, pero falta el detalle de que es un script y como tal hay que indicar en la primera línea el shell que lo ejecutará.
  • Dar permisos de ejecución:
    ivan@doraemon:~$ chmod +x svn_mufly_mirror/hooks/pre-revprop-change
  • Sincronizar: La primera vez nos pedirá el password y a partir de ahí ya no será necesario. Esta primera vez descargará todo el repositorio, por lo que puede tardar un poco.
    ivan@doraemon:~$ svnsync init --username usuariogoogle file:///home/ivan/svn_mufly_mirror https://mufly.googlecode.com/svn
  • A partir de aquí sólo hay que actualizar los cambios.
    ivan@doraemon:~$ svnsync sync --username lopez.ivan file:///home/ivan/svn_mufly_mirror
    Transmitting file data .................
    Committed revision 101.
    Copied properties for revision 101.

  •    Para comprobar que el repositorio es funcional lo podemos configurar en Eclipse (por ejemplo) y probar a navegar por él. Las carpetas se despliegan de manera automática mientras que en el remoto tardan unos segundos.