Subversión · 4 min read · Jan 02, 2026

Configuración de un repositorio Subversion usando Apache, con copia de trabajo autoactualizable - Página 2

Creando un repositorio:

Supongamos que quiero crear un repositorio en /usr/local/subversion/repository usando la base de datos fsfs, así que ejecuto el comando:

mkdir -v /usr/local/subversion/
/usr/bin/svnadmin create --fs-type fsfs /usr/local/subversion/repository

Eso debería crear un repositorio subversion bajo /usr/local/subversion/repository.

ls /usr/local/subversion/repository
conf/  dav/  db/  format  hooks/  locks/  README.txt

Deberías poder ver esos archivos en el directorio del repositorio.

Configurando httpd.conf para servir el repositorio creado:

Agrega las siguientes líneas a httpd.conf o al archivo de configuración de apache correspondiente.



  DAV svn

  SVNPath /usr/local/subversion/repository/

Asegúrate de que el módulo mod_dav esté cargado en el archivo de configuración de apache y también esté presente en el directorio de módulos.

Configurando la autenticación:

Para la autenticación necesitamos hacer cambios en la configuración de apache una vez más.

La autenticación básica requiere que simplemente agreguemos las siguientes líneas al httpd.conf donde agregamos el repositorio svn anteriormente.

AuthType Basic

AuthName "{Nombre de la pestaña emergente de autenticación}"

AuthUserFile {Ubicación del archivo de contraseñas}

Require valid-user

Así que debería verse así.



  DAV svn

  SVNPath /usr/local/subversion/repository/

  AuthType Basic

  AuthName "Repositorio Subversion"

  AuthUserFile /usr/local/subversion/repository/conf/svn-auth-file

  Require valid-user

Es necesario que agreguemos usuarios al archivo de contraseñas antes de que alguien pueda acceder a él, lo cual se describe en el siguiente paso.

Agregando usuarios SVN:

Dado que estamos usando svn con un servidor apache, y un método de autenticación básica de apache.

Necesitamos crear un archivo de contraseñas con el binario htpasswd proporcionado con una instalación estándar de apache.

htpasswd -cmd /usr/local/subversion/repository/conf/svn-auth-file {nombre-de-usuario}

La opción -c crea un nuevo archivo htpasswd.

-m cifra la contraseña con un algoritmo MD5.

d cifra la contraseña con un algoritmo CRYPT.

Donde {nombre-de-usuario} representa un nombre de usuario real que se usará para la autenticación.

Advertencia: No debemos usar la opción -c una vez que hayamos agregado el primer usuario. Usar esto creará y reemplazará todos los usuarios existentes dentro del archivo.

htpasswd -md /usr/local/subversion/repository/conf/svn-auth-file {nombre-de-usuario}

Configurando el diseño inicial del repositorio:

Un repositorio contiene principalmente 3 carpetas estándar.

branches
tags
trunk

Para crear esas carpetas estándar en un repositorio, crea una carpeta temporal en cualquier lugar que desees, /tmp sería una buena idea, con los siguientes subdirectorios.

mkdir -pv /tmp/subversion-layout/{branches,tags}

Después de haber creado todas las carpetas de diseño, mueve todo el contenido de tu proyecto a la carpeta trunk.

mv -v /usr/local/apache2/htdocs /tmp/subversion-layout/trunk

Luego haz una importación inicial del directorio creado temporalmente.

/usr/local/subversion/bin/svn import /tmp/subversion-layout/ http://127.0.0.1/subversion/

Esto te configurará con un diseño de repositorio predeterminado y hará una primera revisión.

Configurando una copia de trabajo:

Podemos eliminar las carpetas temporales que creamos en el último paso, ya que todos los archivos ya están en el repositorio.

Ahora lo que necesitamos hacer es crear una copia de trabajo de todos los archivos en el repositorio bajo /usr/local/apache2/htdocs.

Para que cada vez que un desarrollador actualice los códigos php, pueda ver los cambios en el código tomando efecto en un entorno de trabajo.

Pero configurar una copia de trabajo no lograría esta tarea, necesitaríamos hacer que los scripts de gancho funcionen con una copia de trabajo.

Así, cada vez que un desarrollador se compromete al repositorio, el script de gancho se ejecutará solo y actualizará la copia de trabajo.

Asegúrate de que la carpeta htdocs bajo /usr/local/apache2/ no exista ya.

Si deseas, puedes renombrarla a htdocs_old.

Para configurar una copia de trabajo, haz lo siguiente.

cd /usr/local/apache2/
su – apache
/usr/local/subversion/bin/svn checkout http://127.0.0.1/subversion/trunk/ htdocs

Configurando los scripts de gancho:

Un gancho es un programa activado por algún evento del repositorio, como la creación de una nueva revisión o la modificación de una propiedad no versionada. Cada gancho recibe suficiente información para indicar qué evento es, en qué objetivo(s) está operando y el nombre de usuario de la persona que activó el evento. Dependiendo de la salida o el estado de retorno del gancho, el programa de gancho puede continuar la acción, detenerla o suspenderla de alguna manera.

El subdirectorio de ganchos está, por defecto, lleno de plantillas para varios ganchos de repositorio.

post-commit.tmpl          post-unlock.tmpl          pre-revprop-change.tmpl
post-lock.tmpl            pre-commit.tmpl           pre-unlock.tmpl
post-revprop-change.tmpl  pre-lock.tmpl             start-commit.tmpl

Por ahora, hablaré sobre el script de gancho post-commit, ya que es lo que necesitamos en nuestro caso.

Copia el archivo post-commit.tmpl en post-commit en el mismo directorio de ganchos, y da derechos de ejecución a post-commit.

cp -v /usr/local/subversion/repository/hooks/post-commit.tmpl /usr/local/subversion/repository/hooks/post-commit
chmod +x /usr/local/subversion/repository/hooks/post-commit

Ahora edita el script post-commit y comenta las siguientes dos líneas al final, y agrega la siguiente línea a él.

#commit-email.pl "$REPOS" "$REV" [email protected]

#log-commit.py --repository "$REPOS" --revision "$REV"

/usr/bin/svn update /usr/local/apache2/htdocs/ >> /usr/local/subversion/repository/logs/post-commit.log

Después de hacer eso, crea una nueva carpeta logs, bajo /usr/local/subversion/ para que podamos habilitar el registro, y crea un archivo vacío post-commit.log.

mkdir -v /usr/local/subversion/repository/logs/
touch /usr/local/subversion/repository/logs/post-commit.log

Una vez más, necesitamos asegurarnos de que la carpeta del repositorio tenga la propiedad de usuario adecuada, se recomienda establecer la propiedad en /usr/local/subversion/repository/ para el usuario apache.

chown -Rv apache.apache /usr/local/subversion/repository/

Si todo va bien, eso debería ser todo.

Ahora tienes un servidor de repositorio subversion funcionando que está listo para más importaciones, tan pronto como inicies el servidor apache.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

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