Table of Contents
Subversion
This document shows how to setup a subversion server on a Debian based system.
Required packages: subversion apache2 libapache2-svn
Required: Apache with SSL
Create repositories
Separate repos
mkdir /home/svn svnadmin create /home/svn/first_repo svnadmin create /home/svn/second_repo
/etc/apache2/mods-available/dav_svn.conf
<Location /svn>
DAV svn
SVNParentPath /home/svn
SVNListParentPath On
AuthType Basic
AuthName "Subversion Repositories"
AuthUserFile /etc/subversion/passwd
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>
Disable anonymous access by removing the two LimitExcept lines
Single repo
mkdir /home/svn svnadmin create /home/svn/the_repository
/etc/apache2/mods-available/dav_svn.conf
<Location /svn>
DAV svn
SVNPath /home/svn/the_repository
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/subversion/passwd
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>
Disable anonymous access by removing the two LimitExcept lines
Set permissions
addgroup subversion adduser www-data subversion chown -R www-data:subversion /home/svn chmod -R g+rws /home/svn
Path-Based Authorization
Svnbook
mod_authz_svn can slow down everything!
/etc/subversion/dav_svn.authz
# give everybody read access [/] * = r # give harry full read and write access to this repository, but sally only read access [first_repo:/] harry = rw sally = r # give sally write access only to the 'testing' subdir [first_repo:/testing] sally = rw
/etc/apache2/mods-available/dav_svn.conf
AuthzSVNAccessFile /etc/subversion/dav_svn.authz
WebSVN repository browser
Multiple repos
$config->parentPath('/home/svn');
Single repo
$config->addRepository('repository', 'file:///home/svn/the_repository');
Backup & Restore
Creating a backup of an entire repository while preserving the version history is not a complicated task. There are two different ways: either directly with svnadmin or with the rsvndump tool. The first one can only be done by someone who can access the server via SSH, whereas rsvndump can be used by anybody.
svnadmin
svnadmin dump /path/to/repository > repo.svn_dump
rsvndump
rsvndump https://the.url.com/svn/repository > repo.svn_dump
Restore
svnadmin create /path/to/repository svnadmin load /path/to/repository < repo.svn_dump
Don't forget to set permissions!
