在Linux系统中搭建SVN(Subversion)服务器是一个常见的需求,SVN作为版本控制系统,能够有效管理代码和文档的版本历史,以下是详细的搭建步骤和配置方法,包括环境准备、安装配置、权限管理及常见问题处理。

环境准备与安装
首先需要一台Linux服务器,推荐使用Ubuntu或CentOS系统,以Ubuntu为例,确保系统已更新至最新状态,执行以下命令更新软件包列表:
sudo apt update && sudo apt upgrade -y
安装SVN服务及相关依赖:
sudo apt install subversion libapache2-mod-svn libsvn-tools -y
安装完成后,检查SVN版本确认安装成功:
svnserve --version
创建仓库与配置
SVN仓库默认存储在/var/svn目录,首先创建该目录并设置权限:

sudo mkdir -p /var/svn sudo chown -R www-data:www-data /var/svn sudo chmod -R 775 /var/svn
使用svnadmin命令创建新仓库,例如创建名为project1的仓库:
sudo svnadmin create /var/svn/project1
仓库创建后,进入仓库的conf目录修改配置文件,包括svnserve.conf、passwd和authz。
配置svnserve.conf
编辑/var/svn/project1/conf/svnserve.conf,取消以下注释并修改:
[general] anon-access = none # 禁止匿名访问 auth-access = write # 允许认证用户读写 password-db = passwd # 密码文件路径 authz-db = authz # 权限文件路径 realm = My SVN Repository # 仓库认证域
配置用户密码
编辑passwd文件添加用户,格式为username = password:
[users] user1 = password1 user2 = password2
配置权限文件
编辑authz文件设置用户或用户组的访问权限。
[groups] admin = user1 developers = user2 [/] @admin = rw * = r
上述配置表示admin组用户对根目录有读写权限,其他用户只有读权限。
启动SVN服务
使用以下命令启动SVN服务:
sudo svnserve -d -r /var/svn
参数-d表示后台运行,-r指定仓库根目录,检查服务状态:
ps aux | grep svnserve
通过Apache访问(可选)
若需通过Web方式访问,需配置Apache,安装libapache2-mod-svn后,启用相关模块:
sudo a2enmod dav_svn sudo a2enmod authz_svn
创建Apache配置文件/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>
创建密码文件并设置权限:
sudo htpasswd -c /etc/svn/passwd user1 sudo chown www-data:www-data /etc/svn/passwd sudo chmod 640 /etc/svn/passwd
重启Apache服务:
sudo systemctl restart apache2
防火墙配置
若服务器启用了防火墙,需开放SVN默认端口3690:
sudo ufw allow 3690/tcp
常见问题处理
- 权限错误:确保仓库目录权限为
775,用户属于www-data组。 - 服务无法启动:检查
svnserve.conf配置是否正确,尤其是注释符和空格。
相关问答FAQs
Q1: 如何备份SVN仓库?
A1: 使用svnadmin hotcopy命令创建仓库热备份,
svnadmin hotcopy /var/svn/project1 /backup/svn/project1_backup
定期备份可结合cron任务实现自动化。
Q2: 如何迁移SVN仓库到另一台服务器?
A2: 在原服务器上使用svnadmin dump导出仓库数据,
svnadmin dump /var/svn/project1 > project1_dump.svn
将导出文件传输到新服务器,通过svnadmin load导入:
svnadmin load /var/svn/project1 < project1_dump.svn
完成后重启SVN服务即可。
