Este artículo describe los pasos para instalar y configurar un servidor de Subversion (SVN) en un sistema CentOS 7, incluyendo la integración con el serviodr web Apache para el acceso HTTP.
Instalación de los componentes base
Comience instalando los paquetes necesarios desde los repositorios.
# yum install -y mod_dav_svn subversion
El puerto predeterminado para el demonio svnserve es el 3690. Puede verificarlo inspeccionando el archivo de servicios del sistema.
# grep svn /etc/services
La salida mostrará las líneas que definen el servicio y su puerto.
Creación y configuración de un repositorio
Cree un directorio principal para albergar los repositorios y, a continuación, inicialice uno nuevo dentro de él.
# mkdir -p /srv/repositorios
# svnadmin create /srv/repositorios/proyecto_alpha
El comando svnadmin genera la estructura interna del repositorio. Al inspeccionar su contenido se encuentran directorios como conf, db, hooks, entre otros. Los archivos de configuración clave residen en conf/.
Ajustes del archivo principal de configuración
Modifique conf/svnserve.conf para definir las políticas de acceso y autenticación.
# vim /srv/repositorios/proyecto_alpha/conf/svnserve.conf
Dentro del archivo, establezca las siguientes directivas (asegúrese de que no haya espacios al inicio de las líneas activas):
anon-access = none
auth-access = write
password-db = contrasenas
authz-db = autorizacion
realm = Repositorio del Proyecto Alpha
Gestión de usuarios y permisos
Defina los usuarios del servidor SVN en el archivo de contraseñas.
# vim /srv/repositorios/proyecto_alpha/conf/contrasenas
[usuarios]
gerente = Clave$egura123
desarrollador = C0digo!456
Asigne permisos detallados mediante el archivo de autorización.
# vim /srv/repositorios/proyecto_alpha/conf/autorizacion
[grupos]
equipo_principal = gerente,desarrollador
[/]
gerente = rw
@equipo_principal = r
Inicio y puesta en marcha del servicio
Inicie el demonio svnserve en modo background, apuntando al directorio raíz de los repositorios.
# svnserve -d -r /srv/repositorios
# ss -antl | grep 3690
El último comando confirmará que el servicio está escuchando en el puerto 3690. Para asegurar que el servicio arranque con el sistema, agregue el comando de inicio al script de ejecución local.
# echo "svnserve -d -r /srv/repositorios" >> /etc/rc.local
# chmod +x /etc/rc.local
Si el firewall está activo, abra el puerto requerido.
# firewall-cmd --permanent --add-port=3690/tcp
# firewall-cmd --reload
Operaciones básicas del cliente SVN
A continuación se presentan ejemplos de uso común del cliente svn en la línea de comandos.
Importar un proyecto existente
Para añadir un directorio local a un repositorio vacío, use el comando import.
# mkdir /tmp/mi_codigo_fuente
# touch /tmp/mi_codigo_fuente/index.html /tmp/mi_codigo_fuente/estilo.css
# svn import /tmp/mi_codigo_fuente file:///srv/repositorios/proyecto_alpha/trunk -m "Importación inicial"
Obtener una copia de trabajo
La primera vez se utiliza checkout para descargar el contenido del repositorio a una copia de trabajo local.
# svn checkout svn://192.168.1.10/proyecto_alpha /ruta/local/trabajo
Se le solicitará la autenticación. Las actualizaciones posteriores se realizarán con svn update desde dentro de la copia de trabajo.
Realizar cambios y confirmarlos
Los archivos nuevos deben ser marcados explícitamente antes de ser enviados al repositorio.
# cd /ruta/local/trabajo
# touch nueva_funcionalidad.py
# svn add nueva_funcionalidad.py
# svn commit -m "Añadido archivo de nueva funcionalidad"
La acción commit envía los cambios acumulados (nuevos acrhivos, modificaciones, eliminaciones) al repositorio central.
Integración con el servidor Apache (HTTP)
Permite el acceso al repositorio mediante el protocolo HTTP, lo cual puede ser útil en redes restringidas.
Instalación y configuración de Apache
Instale el servidor web y verifique la presencia de los módulos SVN.
# yum install -y httpd
# grep -E 'mod_dav_svn|mod_authz_svn' /etc/httpd/conf.modules.d/10-subversion.conf
Configure la ubicación SVN dentro de Apache.
# vim /etc/httpd/conf.d/svn.conf
Inserte la siguiente directiva, ajustando las rutas según su entorno.
<Location /svn>
DAV svn
SVNParentPath /srv/repositorios
AuthType Basic
AuthName "Repositorios SVN"
AuthUserFile /etc/httpd/svn_users
AuthzSVNAccessFile /etc/httpd/svn_authz
Require valid-user
</Location>
Archivo de usuarios para Apache
Genere el archivo de contraseñas compatible con Apache.
# htpasswd -c /etc/httpd/svn_users usuario_web1
# htpasswd /etc/httpd/svn_users usuario_web2
Archivo de autorización para Apache
Puede reutilizar la misma lógica de grupos y permisos que antes.
# vim /etc/httpd/svn_authz
[groups]
grupo_web = usuario_web1,usuario_web2
[proyecto_alpha:/]
@grupo_web = rw
Finalmente, reinicie el servicio Apache y abra el puerto 80 si es necesario.
# systemctl start httpd
# systemctl enable httpd
# firewall-cmd --permanent --add-port=80/tcp
# firewall-cmd --reload
Ahora el repositorio es accesible vía HTTP en http://servidor/svn/proyecto_alpha.
Consideraciones para clientes en Windows
Al usar clientes gráficos como TortoiseSVN en Windows:
- URL de conexión: Use
svn://IP/proyectopara el protocolo SVN nativo, ohttp://IP/svn/proyectopara el acceso vía Apache. Las credenciales serán diferentes para cada protocolo. - Iconos de estado: Si los iconos de superposición no aparecen, vaya a Configuración de TortoiseSVN > Icon Overlays y seleccione el caché "Shell". Luego, reinicie la sesión de Windows.
- Flujo de trabajo: Use "Add" para nuevos archivos y "SVN Commit" para enviar los cambios. Use "SVN Update" para sincronizar con el repositorio.
Diferencias clave entre SVN y Git
| Característica | SVN | Git |
|---|---|---|
| Modelo | Centralizado | Distribuido |
| Copia de trabajo | Contiene solo la versión actual | Contiene todo el historial completo |
| Operaciones fuera de línea | Limitadas (requiere conexión para commit, log, diff) | La mayoría de operaciones son locales |
| Manejo de ramas | Basado en copias del directorio, puede ser costoso | Ligero y rápido, fomenta su uso frecuente |
| Velocidad | Depende de la conexión de red | Generalmente más rápido para operaciones locales |
La elección depende del flujo de trabajo del equipo. SVN puede ser más simple para proyectos con una estructura lineal y donde se requiere control estricto de acceso centralizado. Git ofrece mayor flexibilidad y es el estándar en el desarrollo de software moderno y distribuido.