SVN, SVK · 2 min read · Feb 13, 2026

Creando un espejo de solo lectura de tu repositorio SVN con SVK

Creando un espejo de solo lectura de tu repositorio SVN con SVK

Digamos que tienes un SVN para tu proyecto de código abierto y te gustaría reflejarlo en alguna ubicación remota que aloje proyectos de código abierto (como SourceForge.net o dev.java.net). Saltaré la fase de registro de cuenta y proyecto y asumiré que ya tienes tus credenciales y la URL de tu repositorio SVN. También asumo que estás en Debian o Ubuntu y que tu SVN está funcionando bajo Apache httpd.

Hay una herramienta llamada svnsync que viene con SVN 1.4 por defecto y que está diseñada para exactamente el mismo propósito, pero hay una cosa que nos impide usarla en este caso. Requiere un hook svn personalizado que debe estar presente en el repositorio de destino y eso es imposible de personalizar en nuestro caso.

Lo que haces es instalar SVK primero:

# aptitude install svk

Dicho de manera simple, SVK es un superconjunto de SVN y por lo tanto permite algunos trucos avanzados como la sincronización de repositorios. Hay un libro de Control de Versiones con SVK al que puedes referirte como una guía en profundidad de SVK. Seré breve. El concepto es que creas un repositorio SVK (el “depósito”) que contendrá una copia de todos los repositorios SVN involucrados (tu repositorio principal y aquellos a los que vuelcas información) y luego sincronizas estas copias.

Como queremos que los repositorios se sincronicen cada vez que se realiza un commit, se utilizaría el procedimiento de hooks de SVN y en nuestro caso eso sucedería bajo el usuario de apache httpd.

Entonces, para simplificar las cosas, iniciemos sesión bajo esa cuenta y realicemos la rutina requerida.

# su www-data

Ahora lo que necesitamos hacer es inicializar el depósito predeterminado.

$ svk depotmap

Edita la ruta para especificar dónde te gustaría almacenar el depósito. Yo elegiría /var/opt/svk/local.

Ahora puedes crear al menos 2 espejos: uno para el repositorio local y otro para el remoto (nada te impide tener múltiples espejos):

$ svk mirror //local file:///var/opt/svn

Así es como mapeamos la ubicación del repositorio (llamada “local”) directamente a la ubicación del sistema de archivos donde reside el repositorio svn.

$ svk mirror //remote https://myproject.svn.sourceforge.net/svnroot/myproject

Lo mismo ocurre con el repositorio remoto, en este caso alojado en SourceForge.net. Necesitarás aceptar permanentemente el certificado y proporcionar tu nombre de usuario y contraseña para que se almacenen en caché.
Como el repositorio remoto será de solo lectura, lo sincronizaremos solo una vez

$ svk sync //remote

y luego realizaremos las acciones que más tarde serán realizadas por el script post-commit.

$ svk sync //local  
$ svk smerge --baseless --incremental --verbatim //local //remote

El último comando sincronizará el repositorio local con el remoto preservando todos los detalles del commit.
Para que esto se haga automáticamente después de que se realice un commit en el repositorio local, crea un archivo llamado post-commit en el directorio hooks de tu repositorio SVN local y pon esos comandos en él. Hazlo ejecutable con

$ chmod +x ./post-commit #considerando que estás en el directorio ''hooks''

Eso es todo, compruébalo.

Alex Yanchenko, www.centricware.org
Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.