在Linux环境下搭建SVN服务器通常使用Apache Subversion软件,它是一款开源的版本控制系统,能够高效管理文件和目录的变更,以下是详细的搭建步骤,包括环境准备、安装配置、权限管理及服务优化等内容。

环境准备
首先需要一台安装有Linux操作系统的服务器,推荐使用CentOS 7或Ubuntu 18.04及以上版本,确保系统已更新至最新状态,以CentOS 7为例,执行以下命令更新系统:
sudo yum update -y
关闭防火墙和SELinux(生产环境需谨慎配置):
sudo systemctl stop firewalld sudo systemctl disable firewalld sudo setenforce 0
如果是Ubuntu系统,需使用apt更新并安装apache2等依赖。
安装SVN服务
安装Subversion
通过yum或apt安装SVN服务:

# CentOS sudo yum install -y subversion # Ubuntu sudo apt update && sudo apt install -y subversion
安装完成后,验证版本:
svnserve --version
创建SVN仓库
选择合适的位置创建仓库,例如/var/svn:
sudo mkdir -p /var/svn sudo svnadmin create /var/svn/project1
创建后,仓库目录会自动生成以下结构:
conf/:配置文件目录db/:数据存储目录hooks/:钩子脚本目录locks/:锁文件目录
配置SVN服务
修改配置文件
进入仓库配置目录,编辑svnserve.conf:

sudo vim /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 vim /var/svn/project1/conf/passwd
格式如下:
[users] user1 = password1 user2 = password2
配置权限控制
编辑authz文件,设置用户或用户组的访问权限:
sudo vim /var/svn/project1/conf/authz
示例配置:
[groups] admin = user1 dev = user2 [/] @admin = rw * = r
表示admin组对根目录有读写权限,其他用户只读。
启动SVN服务
使用svnserve启动
通过以下命令启动SVN服务:
sudo svnserve -d -r /var/svn
参数说明:
-d:后台守护进程模式-r:指定仓库根目录
设置开机自启
创建systemd服务文件:
sudo vim /etc/systemd/system/svnserver.service ```如下: ```ini [Unit] Description=Subversion Server After=network.target [Service] Type=forking User=root Group=root ExecStart=/usr/bin/svnserve -d -r /var/svn Restart=on-failure [Install] WantedBy=multi-user.target
启用并启动服务:
sudo systemctl enable svnserver sudo systemctl start svnserver
验证SVN服务
检查服务状态
sudo systemctl status svnserver
确保服务显示active (running)。
客户端连接测试
在客户端使用以下命令检出仓库:
svn co svn://服务器IP/project1
输入配置的用户名和密码,若成功检出文件,则搭建完成。
高级配置(可选)
使用Apache协议访问
若需通过HTTP/S访问,需安装Apache和mod_dav_svn模块:
# CentOS sudo yum install -y httpd mod_dav_svn # Ubuntu sudo apt install -y libapache2-mod-svn
配置Apache虚拟主机,添加SVN配置:
<Location /svn>
DAV svn
SVNParentPath /var/svn
AuthType Basic
AuthName "SVN Repository"
AuthUserFile /etc/svn/passwd
Require valid-user
</Location>
创建密码文件并重启Apache:
sudo htpasswd -cm /etc/svn/passwd user1 sudo systemctl restart httpd
仓库备份
编写备份脚本,使用svnadmin hotcopy命令:
#!/bin/bash
DATE=$(date +%Y%m%d)
svnadmin hotcopy /var/svn/project1 /backup/svn_backup/project1_$DATE
find /backup/svn_backup -name "project1_*" -mtime +7 -exec rm {} \;
通过cron设置定时任务,实现每日备份。
常见问题解决
- 权限问题:确保
svnserve.conf、passwd、authz文件权限正确(通常为600或644)。 - 端口占用:默认端口为3690,若冲突可通过
svnserve -d -r /var/svn --listen-port 3691指定其他端口。
相关问答FAQs
Q1: 如何修改SVN仓库的默认端口?
A1: 启动SVN服务时添加--listen-port参数指定新端口,例如svnserve -d -r /var/svn --listen-port 3691,客户端连接时需使用svn://服务器IP:3691/project1。
Q2: SVN服务无法连接,如何排查?
A2: 首先检查服务状态(systemctl status svnserver),确认端口是否监听(netstat -tuln | grep 3690),然后验证防火墙是否放行3690端口,最后检查仓库配置文件语法是否正确。
