在Linux环境下搭建SVN(Subversion)服务器是团队协作开发中常用的版本控制方案,它集中管理代码文件,支持版本回溯、权限控制和多用户协同,尤其适合需要集中式管理的项目,以下从安装、配置、使用到维护,详细讲解Linux SVN服务器的搭建与运维流程。

SVN服务器的安装
SVN服务器软件名为subversion,不同Linux发行版的安装命令略有差异:
- Ubuntu/Debian系统:
更新软件列表后安装:sudo apt update && sudo apt install subversion -y
- CentOS/RHEL系统:
使用yum或dnf安装(CentOS 7及以下用yum,CentOS 8+用dnf):sudo yum install subversion -y # 或 sudo dnf install subversion -y
安装完成后,可通过
svnserve --version验证是否成功,输出版本信息即表示安装成功。
创建SVN版本库
版本库是SVN存储文件和版本信息的核心目录,建议创建在/var/svn下(需提前创建目录并设置权限):
sudo mkdir -p /var/svn/repos sudo svnadmin create /var/svn/repos/my_project # 创建名为my_project的版本库 sudo chown -R apache:apache /var/svn/repos # 若使用Apache访问,需设置所有者;若用svnserve,可设为root或普通用户
创建后,版本库目录下会生成conf、db、hooks等子目录,其中conf是核心配置目录,包含svnserve.conf(服务配置)、passwd(用户密码)、authz(权限控制)三个关键文件。
配置SVN服务器
SVN服务器可通过两种方式访问:svnserve(轻量级,独立服务)或HTTP/Apache(支持Web界面),这里以常用的svnserve为例说明配置:
编辑svnserve.conf
进入版本库的conf目录,修改svnserve.conf:
cd /var/svn/repos/my_project/conf sudo vim svnserve.conf
关键配置项如下(需取消注释并修改):
[general] anon-access = none # 匿名用户无访问权限 auth-access = write # 认证用户可读写 password-db = passwd # 密码文件路径(默认为当前目录passwd) authz-db = authz # 权限控制文件路径(默认为当前目录authz] realm = My SVN Repository # 认证域名称(提示用户输入认证信息时显示)
创建用户账号
编辑passwd文件,添加用户(格式:用户名 = 密码):
sudo vim passwd
示例:

[users] user1 = password123 user2 = password456
设置权限控制
编辑authz文件,定义用户或用户组的访问权限(表示所有用户,表示用户组):
sudo vim authz
示例:
[/] # 根目录权限 user1 = rw # user1对整个仓库有读写权限 user2 = r # user2只有读权限 [my_project:/docs] # docs子目录权限 @developers = rw # 若存在[developers]用户组,组成员对docs目录有读写权限 * = r # 其他用户对docs目录只读
启动SVN服务
启动svnserve服务
使用以下命令启动(-d后台运行,-r指定版本库根目录):
svnserve -d -r /var/svn/repos
若需指定端口(默认3690),添加--listen-port 8090参数。
设置开机自启
创建systemd服务文件(/etc/systemd/system/svnserve.service):
[Unit] Description=Subversion Server After=network.target [Service] Type=forking User=svn Group=svn ExecStart=/usr/bin/svnserve -d -r /var/svn/repos Restart=on-failure [Install] WantedBy=multi-user.target
然后执行systemctl enable --now svnserve即可开机自启。
防火墙配置
若服务器开启了防火墙,需开放SVN端口(默认3690):
- CentOS/RHEL(firewalld):
sudo firewall-cmd --add-port=3690/tcp --permanent sudo firewall-cmd --reload
- Ubuntu/Debian(ufw):
sudo ufw allow 3690/tcp
客户端连接与使用
客户端可通过命令行或图形工具(如TortoiseSVN)连接SVN服务器,以命令行为例:
-
检出(Checkout):首次下载代码到本地

svn checkout svn://服务器IP/my_project ~/my_project
输入用户名和密码(在
passwd中定义的用户)即可完成下载。 -
提交(Commit):将本地修改上传到服务器
cd ~/my_project echo "新增内容" >> test.txt svn add test.txt svn commit -m "新增test.txt文件"
-
更新(Update):获取服务器最新版本
svn update
常用命令还包括svn diff(查看差异)、svn log(查看日志)、svn revert(撤销修改)等,可通过svn help查看完整列表。
SVN服务器维护
版本库备份
定期备份是保障数据安全的关键,推荐使用svnadmin dump命令:
svnadmin dump /var/svn/repos/my_project > /backup/my_project_backup_$(date +%Y%m%d).svn
恢复时需先创建新版本库,再通过svnadmin load导入备份:
svnadmin create /var/svn/repos/my_project_new svnadmin load /var/svn/repos/my_project_new < /backup/my_project_backup_20231001.svn
日志查看与故障排查
- 查看服务状态:
systemctl status svnserve - 检查端口占用:
netstat -tuln | grep 3690 - 查看版本库信息:
svnlook info /var/svn/repos/my_project - 若出现权限错误,检查
authz文件路径是否正确,权限配置是否合理。
相关问答FAQs
Q1:如何修改SVN服务器的默认访问端口?
A:启动svnserve时通过--listen-port参数指定新端口,例如svnserve -d -r /var/svn/repos --listen-port 8090,若需永久修改,可创建systemd服务文件时添加Environment="SVNPORT=8090",并在启动命令中使用$SVNPORT变量,或修改/etc/sysconfig/svnserve(CentOS)配置文件(添加SVNserve_OPTS="--listen-port 8090 -r /var/svn/repos")。
Q2:SVN版本库损坏后如何尝试恢复?
A:首先通过svnadmin verify检查版本库完整性:svnadmin verify /var/svn/repos/my_project,若提示错误,尝试用svnadmin recover修复:svnadmin recover /var/svn/repos/my_project,修复后再次验证,若仍无法恢复,需从最近的备份通过svnadmin load导入,若备份不可用,可尝试用svnadmin dump生成部分可恢复数据(需指定--incremental参数)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/30420.html