guest@6admin.io:~$

Subversion: un WebSVN avec mod_dav et mod_svn d'Apache

Subversion a deux modes d’accès: svnserve (daemon standalone, protocole svn://) et Apache avec mod_dav_svn (protocole http:// ou https://). Le mode Apache expose le repository via HTTP, avec l’authentification Apache, le SSL Apache et WebSVN pour le browsing web des sources.

Le module mod_dav_svn

apt-get install libapache2-svn

Ce paquet installe mod_dav et mod_dav_svn (le module qui expose les repositories SVN via WebDAV).

La configuration Apache

# /etc/apache2/sites-available/svn
<Location /svn>
    DAV svn
    SVNParentPath /var/svn
    AuthType Basic
    AuthName "Subversion Repository"
    AuthUserFile /etc/apache2/dav_svn.passwd
    Require valid-user
</Location>
  • DAV svn : active le mode SVN
  • SVNParentPath /var/svn : le directory qui contient les repositories (un repo par sous-directory)
  • AuthUserFile : le fichier htpasswd pour l’authentification

Créer le repository et le fichier de mots de passe:

svnadmin create /var/svn/projet1
htpasswd -c /etc/apache2/dav_svn.passwd user1
htpasswd /etc/apache2/dav_svn.passwd user2
chown -R www-data:www-data /var/svn/projet1

Apache doit être propriétaire du repository (il écrit dans le repository à chaque commit).

Le checkout

svn checkout http://serveur/svn/projet1

Le protocole est http:// (ou https:// si mod_ssl est activé), pas svn://: c’est Apache qui sert le repository, pas svnserve.

WebSVN

WebSVN est une application PHP qui browse les repositories SVN: les fichiers, les diffs, les logs, les blame. Il ne fait pas de checkout, il fait du browsing en lecture seule.

apt-get install websvn

La configuration de WebSVN pointe vers les repositories:

// /etc/websvn/config.php
$config->parentPath('/var/svn');
$config->useAuthentication();

WebSVN est accessible sur http://serveur/websvn/ et il browse tous les repositories dans /var/svn.

SVNParentPath vs SVNPath

  • SVNParentPath /var/svn : expose TOUS les sous-directories de /var/svn comme repositories. L’URL est http://serveur/svn/projet1, http://serveur/svn/projet2, etc.
  • SVNPath /var/svn/projet1 : expose UN SEUL repository. L’URL est http://serveur/svn et ce repository-là.

SVNParentPath est le pattern multi-projets: un directory parent, plusieurs repositories, un seul bloc Apache.

[edit: 2026] Subversion a cédé la place à Git dans 95% des projets, mais mod_dav_svn existe toujours et sert toujours dans les entreprises qui ont un héritage SVN. WebSVN a été remplacé par des interfaces Git web (GitLab, Gitea, Gogs) qui font browsing + hosting + CI. Le pattern Apache-exposed-repository (exposer un VCS via HTTP/HTTPS avec authentification Apache) reste pertinent pour les environnements où on ne peut pas installer de service dédié, mais Git a simplifié le pattern: git http-backend + smart HTTP ou simplement un remote sur un chemin de fichiers (git clone /path/to/repo).