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/repositoryEso debería crear un repositorio subversion bajo /usr/local/subversion/repository.
ls /usr/local/subversion/repositoryconf/ dav/ db/ format hooks/ locks/ README.txtDeberí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-userAsí 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.
branchestagstrunkPara 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/trunkLuego 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/ htdocsConfigurando 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.tmplpost-lock.tmpl pre-commit.tmpl pre-unlock.tmplpost-revprop-change.tmpl pre-lock.tmpl start-commit.tmplPor 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-commitchmod +x /usr/local/subversion/repository/hooks/post-commitAhora 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.logDespué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.logUna 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.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.