Subversion es un sistema de control de versiones ideado para reemplazar al popular CVS. Subversion nos permite entre muchas otras cosas mantener versiones antiguas de ficheros y poder trabajar de manera colaborativa sin pisar el trabajo de otros.

En este tutorial vamos a ver como instalar el servidor de subversion en una maquina ubuntu.

Para ello el primer paso es instalar los paquetes necesarios

sudo apt-get install subversion libapache2-svn subversion-tools

Creamos la carpeta para guardar los ficheros

sudo mkdir /home/<user>/svn

Editamos el fichero de configuración

sudo nano /etc/apache2/mods-enabled/dav_svn.conf

Hay que modificar el archivo hasta que se parezca a esto

# dav_svn.conf - Example Subversion/Apache configuration
#
# For details and further options see the Apache user manual and
# the Subversion book.# <location URL> ... </location>
# URL controls how the repository appears to the outside world.
# In this example clients access the repository as http://hostname/svn/
<location /svn>
# Uncomment this to enable the repository,
DAV svn
# Set this to the path to your repository
SVNParentPath /home/<user>/svn

# The following allows for basic http authentication.  Basic authentication
# should not be considered secure for any particularly rigorous definition of
# secure.
# to create a passwd file
# # rm -f /etc/apache2/dav_svn.passwd
# # htpasswd2 -c /etc/apache2/dav_svn.passwd dwhedon
# New password:
# Re-type new password:
# Adding password for user dwhedon
# #
# Uncomment the following 3 lines to enable Basic Authentication
 AuthType Basic
 AuthName "Subversion Repository Access"
 AuthUserFile /etc/apache2/dav_svn.passwd
 Require valid-user
# Uncomment the following line to enable Authz Authentication
# AuthzSVNAccessFile /etc/apache2/dav_svn.authz
# The following three lines allow anonymous read, but make
# committers authenticate themselves.
#<limitexcept GET PROPFIND OPTIONS REPORT>
#Require valid-user
#</limitexcept>
</location>

Creamos el fichero de usuarios y claves

sudo htpasswd -cm /etc/apache2/dav_svn.passwd <username>

Usamos este comando si queremos añadir mas usuarios

sudo htpasswd /etc/apache2/dav_svn.passwd <another username>

Reiniciamos apache

sudo /etc/init.d/apache2 restart

Creamos la carpeta que contendrá el proyecto

sudo mkdir -p /home/<user>/svn/<project>

Creamos el repositorio

sudo svnadmin create /home/<user>/svn/<project>

Conectamos al subversion localmente y creamos las carpetas Trunk, Tags y Branches

sudo svn mkdir file:///home/<user>/svn/<project>/trunk -m "Trunk"
sudo svn mkdir file:///home/<user>/svn/<project>/tags -m "Tags"
sudo svn mkdir file:///home/<user>/svn/<project>/branches -m "Branches"

Otorgamos permisos a apache

sudo chown -R www-data.www-data /home/<user>/svn

Navegamos a la carpeta /etc/init.d, creamos un fichero llamado init-svnserve y lo abrimos con nano para editarlo

cd /etc/init.d/
sudo touch init-svnserve
sudo nano init-svnserve

En el fichero añadimos esta linea

svnserve -d -r /home/<user>/svn

Damos permisos de ejecución al fichero

sudo chmod +x init-svnserve

Actualizamos el arranque del sistema para que detecte el nuevo fichero

sudo update-rc.d init-svnserve defaults

Reiniciamos el servidor y todo funcionando!

sudo shutdown -r now