在Ubuntu系统上搭建SVN(Subversion)服务器是一个常见的需求,主要用于版本控制和团队协作,以下是详细的搭建步骤,包括安装、配置、权限管理及安全设置等内容。

系统准备
确保Ubuntu系统已更新至最新版本,执行以下命令更新系统软件包列表:
sudo apt update sudo apt upgrade -y
然后安装必要的依赖包,如apache2(如果需要通过HTTP访问SVN)和subversion:
sudo apt install apache2 subversion libapache2-svn -y
安装完成后,检查svnserve和apache2服务是否正常运行:
systemctl status svnserve systemctl status apache2
创建SVN仓库
SVN仓库是存储版本数据的目录,建议在/var/svn下创建仓库,例如名为project_repo:

sudo mkdir -p /var/svn sudo svnadmin create /var/svn/project_repo
创建后,仓库目录会自动生成以下结构:
conf/:存放配置文件(svnserve.conf、passwd、authz)。db/:存放版本数据。hooks/:存放钩子脚本。locks/:存放锁数据文件。
配置SVN仓库
配置svnserve.conf
编辑仓库配置文件:
sudo nano /var/svn/project_repo/conf/svnserve.conf
[general] anon-access = none # 禁止匿名访问 auth-access = write # 允许认证用户读写 password-db = passwd # 密码文件路径 authz-db = authz # 权限控制文件路径 realm = My SVN Repository # 认证域名称
保存并退出(Ctrl+O,Ctrl+X)。
配置用户密码
编辑passwd文件添加用户:

sudo nano /var/svn/project_repo/conf/passwd
格式为用户名 = 密码,
[users] admin = password123 user1 = userpass
配置权限控制
编辑authz文件设置目录权限:
sudo nano /var/svn/project_repo/conf/authz
示例配置:
[groups] admin_group = admin dev_group = user1 [/] @admin_group = rw * = r [/trunk] @dev_group = rw
说明:
[groups]定义用户组。[/]表示仓库根目录权限。* = r表示其他用户只读。
启动SVN服务
使用svnserve独立服务
编辑svnserve配置文件:
sudo nano /etc/default/svnserve
将OPTIONS行修改为:
OPTIONS="-r /var/svn --listen-host 0.0.0.0"
启动并设置开机自启:
sudo systemctl start svnserve sudo systemctl enable svnserve
测试连接:
svn co svn://localhost/project_repo
通过Apache访问(可选)
如果需要通过HTTP访问,需启用apache2-svn模块并配置虚拟主机,编辑/etc/apache2/mods-available/dav_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 -cm /etc/svn/passwd admin sudo chown -R www-data:www-data /var/svn sudo systemctl restart apache2
通过浏览器访问http://localhost/svn/project_repo。
安全设置
- 防火墙配置:允许SVN端口(3690)和HTTP端口(80):
sudo ufw allow 3690 sudo ufw allow 80
- 仓库权限:确保仓库目录属主为
www-data(HTTP模式)或svn用户:sudo chown -R www-data:www-data /var/svn
常见操作
- 导出仓库:
svn export svn://localhost/project_repo /tmp/export - 导入项目:
svn import /tmp/my_project svn://localhost/project_repo -m "Initial import" - 查看日志:
svn log svn://localhost/project_repo
相关问答FAQs
Q1: 如何修改SVN仓库的密码?
A1: 编辑passwd文件(路径为/var/svn/仓库名/conf/passwd),直接修改对应用户的密码值,保存后重启svnserve服务即可生效。
Q2: SVN服务启动失败,提示“Address already in use”如何解决?
A2: 检查3690端口是否被占用:sudo netstat -tlnp | grep 3690,若被占用,可修改/etc/default/svnserve中的--listen-host为特定IP,或终止占用端口的进程(sudo kill -9 PID)。
