Subversion (SVN) es uno de los sistema para manejo y control de versiones más usado hoy en día, llegando a reemplazar a sistemas anteriores como CVS.
Algunas de las ventajas que nos da trabajar un proyecto junto a un sistema de control de versiones es que este centraliza mediante un repositorio todos los documentos, archivos fuentes, librerías y demás por lo que evitamos duplicados y redundancia de códigos; otra ventaja es que nos ayuda a mantener la información de la evolución del sistema (su historia) y no sólo de los componentes individuales. Intenta mantener todo esto en un proyecto grupal sin usar un controlador de versiones y verás el verdadero infierno en que se puede convertir.
Es por eso que algunos ejemplos de proyectos en los cuales se usa actualmente SVN son Apache, KDE, GCC, por mencionar algunos.
En este manual vamos a instalar Subversión sobre Apache en un Ubuntu 9.04, sin embargo, los comandos son los mismos para cualquier otra versión de Linux.
Bueno, empecemos con la instalación, lo primero que debemos tener instalado es Apache, por lo que aquí dejo unas instrucciones sencillas para hacerlo, si tu ya tienes instalado Apache, puedes saltarte a los siguientes pasos.
Instalación de Apache:
Lo primero que debemos hacer es instalar Apache y Subversion junto con el módulo de integración de ambos, esto lo conseguimos con el comando:
sudo apt-get install apache2 subversion lipapache2-svn
Esto instalará Apache junto a todas sus dependencias por lo que lo siguiente es modificar el archivo httpd:
sudo nano /etc/apache2/httpd.conf
y agregamos las siguientes líneas:
ServerName localhost
User usuario
Group usuario
Donde debes reemplazar usuario por tu nombre de usuario (con el que te logueas en Ubuntu). Guardamos y reiniciamos apache:
sudo /etc/init.d/apache2 restart
Por lo que nos deberá aparecer un mensaje indicándonos que se ha levantado correctamente el servicio, por lo que ahora podemos probar a escribir "http://localhost" en el navegador, si todo esta correcto deberíamos obtener una página con el texto "It, Works!", si es asì, ya tenemos instalado Apache (la carpeta donde estan los documentos web es /var/www/ por si deseas cambiar ese index)
Instalación de Subversion:
Si te saltaste la sección anterior porque ya tienes instalado Apache, solamente deberás instalar los siguientes paquetes:
sudo apt-get install subversion libapache2-svn
Esto instalará subversion junto con el módulo de integración para apache, por lo que ahora debemos de hacer las configuraciones para permitir que se modifiquen los archivos del repositorio desde web, mediante apache, esto lo conseguimos a través del protocolo WEB/DAV ((Web-based Distributed Authoring and Versioning)), el cual es una extensión del HTTP.
WEBDAV esta diseñado para permitir a grupos o individuos el editar y manejar archivos almacenados en un servidor web. El protocolo permite la creacion de “web-shares” que pueden usarce para almacenar archivos, proyectos colaborativos, editar sitios web, entre otras cosas. WebDAV soporta propiedades tales como editar, copiar, y mover archivos, poner candados, listas de recursos, y modificacion de propiedades.
Para más información sobre WEBDAV en Apache, podemos consultar el siguiente enlace
El módulo de subversion utiliza WEBDAV por lo que es de esperar que la instalación habilite los modulos, pero para confirmar debemos ingresar el siguiente comando:
sudo a2enmod dav_svn
, lo cual nos mostrará un resultado similar a la imagen.
Ahora lo que deberemos hacer es crear una carpeta para el repositorio, esta puedes ponerla donde quieras y con el nombre que quieras, en mi caso será "~/repositorio"
mkdir ~/repositorio
Ejecutamos el siguiente comando para que subversion cree un nuevo repositorio en la carpeta indicada, usando la herramienta svnadmin:
sudo svnadmin create ~/repositorio
Ahora hay q configurar Apache para que reconozca el repositorio. Esto lo hacemos editando el archivo:
sudo nano /etc/apache2/mods-enabled/dav_svn.conf
Buscamos la línea #<location /svn> y la descomentamos (quitamos el simbolo de #) ahora habilitamos el repositorio descomentando la linea #DAV svn, descomentamos la linea #SVNPath y escribimos la direccion de la carpeta de repositorio (en mi caso, ~/repositorio). Para el control de acceso, haremos la configuracion del modo basico, pero sería bueno que leyeras las instrucciones que estan comentadas para los otros dos modos en caso que creas que sea necesario un control mas fino para tu proyecto. Descomentamos las siguientes lineas #AuthType Basic, #AuthName "Subversion Repository", #AuthUserFile /etc/apache2/dav_svn.passwd, #Require valid-user, #</Location> por lo que al final nuestro archivo quedará algo así:
<Location /svn>
DAV svn
SVNPath /home/svn
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
</Location>
Guardamos y salimos.
Ahora debemos crear los usuarios para trabajar con Subversion, esto podemos hacerlo de dos formas, creamos usuarios individualmente mediante el comando:
sudo htpasswd -cm /etc/apache2/dav_svn.passwd usuario
Donde usuario es cualquier nombre que desees, luego ingresas tu password y luego el password del nuevo usuario.
Otra forma es creando un grupo de usuarios con todos los permisos y restricciones, y luego agregando cuantos usuarios comunes como se requieran:
groupadd repositorio
ahora creamos todos los usuarios que necesitemos y los agregamos al grupo:
useradd usuario1 -m -G repositorio
passwd usuario1
useradd usuario2 -m -G repositorio
passwd usuario2
Ahora le damos permisos al grupo sobre el repositorio:
chown -R root:repositorio ~/repositorio
chmod 770 ~/repositorio
Para que los usuarios al crear revisiones, las creen con determinados permisos de manera que todos los usuarios puedan acceder, debemos asignarles el umask y asì evitamos errores de permiso denegado, como este:
No se pudo abrir el archivo '/svn/db/current': Permiso denegado
Asignamos el umask para cada usuario que creemos, editamos el archivo .profile de su home, por ejemplo:
sudo nano /home/usuario1/.profile
y buscamos la línea "#umask 022" y la cambiamos por "umask 770"
Ya casi terminamos, ahora sólo debemos importar la estructura de carpetas: trunk, branches, y tags a nuestro repositorio. A continuación una descripción del porque de esta estructura:
trunk: contiene el tronco principal del proyecto donde se va creando los directorios/ficheros y se van modificando.
branches: es donde se guardan copias del tronco principal en estas para poder hacer cambios experimentales y pruebas sin tener que modificar el trunk.
tags:Acá se guardan versiones del proyecto, que ya están terminadas y sobre las cuales no se harán más cambios. (son versiones históricas)
Para crear esta estructura en el repositorio, creamos una carpeta temporal cualquiera (por ejemplo, ~/tmpRepositorio)
mkdir ~/tmpRepositorio
cd ~/tmpRepositorio
mkdir trunk branches tags
Ahora importamos esta estructura al subversion mediante el comando:
sudo svn import . file:///home/mi_usuario/repositorio -m "Se ha importado la estructura del directorio"
Donde en file:// debes poner la dirección local de la carpeta que usarás para repositorio.
El parámetro despues de -m es para enviarle un mensaje a subversion indicando la razón de la operación.
Por último debemos cambiar los permisos del repositorio para que se puedan realizar los commits (actualizaciones):
sudo chmod -R 770 /home/alexander/repositorio
Listo, ya tenemos instalado y configurado Subversion, por lo que ahora deberemos reiniciar el servidor Apache:
sudo /etc/init.d/apache2 restart
Y escribimos en nuestro navegador: "http://localhost/svn" donde nos pedirá que nos autentiquemos, escribimos el usuario y contraseñas que creamos para Subversion y listo, nos deberá mostrar la siguiente estructura de carpetas:
Fuentes:
Instalaciòn de Apache: http://ubuntu-ar.org/node/206
Wiki sobre Subversion: http://en.wikipedia.org/wiki/Subversion_(software)
Conf. de WEBDAV junto a Apache: http://www.digital-arcanist.com/sanctum/article.php?story=20070427101250622
Instalación y conf. de Subversion: http://sherekan.com.ar/2008/03/25/instalacion-configuracion-y-uso-de-subversion-en-linux/