在Ubuntu系统中搭建SVN(Subversion)服务器是一个常见的需求,适用于团队协作开发中的版本控制管理,SVN是一款开源的版本控制系统,通过中央服务器集中管理代码文件,支持多人协作、版本回溯和历史记录查询等功能,以下将详细介绍在Ubuntu上搭建SVN服务器的完整步骤,包括环境准备、安装配置、仓库创建、用户权限管理以及服务启动与测试等环节。

环境准备
在开始搭建之前,确保Ubuntu系统已更新至最新的软件包列表,并具备基本的网络配置,推荐使用Ubuntu 20.04或22.04 LTS版本,以获得更好的稳定性和支持,通过以下命令更新系统:
sudo apt update sudo apt upgrade -y
确保系统已安装apache2(如果通过HTTP方式访问)或svnserve(通过SVN协议访问),本文将分别介绍两种方式的配置过程。
安装SVN服务
Ubuntu官方软件源中包含SVN相关组件,可通过apt直接安装,执行以下命令安装Subversion服务器端工具:
sudo apt install subversion -y
安装完成后,验证SVN版本:

svnserve --version
若显示版本信息,则表示安装成功,若需通过HTTP协议访问(例如结合Apache实现Web界面),还需安装libapache2-mod-svn和apache2:
sudo apt install apache2 libapache2-mod-svn -y
创建SVN仓库
SVN仓库是存储代码文件的目录,建议创建在/var/svn路径下,首先创建该目录并设置权限:
sudo mkdir -p /var/svn sudo chown -R www-data:www-data /var/svn # 若使用Apache,需授权给www-data用户 sudo chmod -R 775 /var/svn
使用svnadmin创建新仓库,例如命名为project1:
sudo svnadmin create /var/svn/project1
创建完成后,仓库目录下会生成多个文件和文件夹,包括conf(配置目录)、db(数据存储)、hooks(钩子脚本)等。

配置仓库访问权限
进入仓库的conf目录,修改三个核心配置文件:svnserve.conf(SVN服务配置)、passwd(用户密码)和authz(权限控制)。
配置svnserve.conf
sudo nano /var/svn/project1/conf/svnserve.conf
确保以下配置项未被注释,并根据需求修改:
[general] anon-access = none # 禁止匿名访问 auth-access = write # 允许认证用户读写 password-db = passwd # 密码文件路径 authz-db = authz # 权限文件路径 realm = My SVN Repository # 仓库认证领域名称
配置用户密码
编辑passwd文件,添加或修改用户信息:
sudo nano /var/svn/project1/conf/passwd
格式为username = password,
[users] user1 = password1 user2 = password2
配置权限控制
编辑authz文件,定义用户或用户组的访问权限:
sudo nano /var/svn/project1/conf/authz
示例配置如下:
[groups] admin = user1 developers = user1,user2 [/] @admin = rw * = r [/project1/trunk] @developers = rw
上述配置表示:admin组用户对整个仓库有读写权限,其他用户只读;developers组对trunk目录有读写权限。
启动SVN服务
SVN服务可通过两种方式启动:独立服务(svnserve)或集成Apache服务。
使用svnserve独立服务
编辑svnserve配置文件,指定仓库根目录和数据目录:
sudo nano /etc/default/svnserve
SVNserve_ARGS="--root /var/svn -r /var/svn"
启动服务并设置开机自启:
sudo systemctl start svnserve sudo systemctl enable svnserve
检查服务状态:
sudo systemctl status svnserve
集成Apache服务(可选)
若通过HTTP访问,需启用Apache的SVN模块并配置虚拟主机,首先启用模块:
sudo a2enmod dav_svn sudo a2enmod authz_svn
创建Apache配置文件:
sudo nano /etc/apache2/sites-available/svn.conf
<Location /svn>
DAV svn
SVNParentPath /var/svn
AuthType Basic
AuthName "SVN Repository"
AuthUserFile /etc/svn/passwd
AuthzSVNAccessFile /etc/svn/authz
Require valid-user
</Location>
创建密码文件并添加用户(需先安装apache2-utils):
sudo htpasswd -c /etc/svn/passwd user1
启用配置并重启Apache:
sudo a2ensite svn.conf sudo systemctl restart apache2
测试SVN仓库
使用SVN客户端测试连接,若通过svnserve访问,命令为:
svn co svn://localhost/project1
输入配置的用户名和密码,若成功检出文件,则表示搭建成功,若通过HTTP访问,则使用:
svn co http://localhost/svn/project1
常见问题与维护
- 权限问题:确保仓库目录权限正确,尤其是
db目录需可写。 - 防火墙配置:若远程访问,需开放SVN默认端口(3690)或HTTP端口(80)。
- 仓库备份:定期通过
svnadmin hotcopy备份仓库数据。
相关问答FAQs
Q1: 如何修改SVN仓库的默认端口?
A1: 修改/etc/default/svnserve文件中的SVNserve_ARGS参数,添加--listen-port 新端口号,然后重启服务。SVNserve_ARGS="--root /var/svn -r /var/svn --listen-port 3691",客户端连接时需指定新端口,如svn://localhost:3691/project1。
Q2: SVN仓库如何实现增量备份?
A2: 使用svnadmin dump命令导出仓库数据,并通过管道压缩实现增量备份。svnadmin dump /var/svn/project1 | gzip > project1_backup_$(date +%Y%m%d).gz,恢复时需先创建空仓库,再使用svnadmin load导入备份文件。
