在Linux系统中配置SVN(Subversion)服务器是企业级版本控制管理的常见需求,本文将详细介绍从环境准备到服务启动、权限管理及日常维护的全过程,帮助用户快速搭建稳定可靠的SVN服务。

环境准备与安装
首先需要确保系统已安装必要的编译工具和依赖库,以CentOS/RHEL系统为例,执行以下命令安装SVN及相关组件:
yum install -y subversion mod_dav_svn httpd # 基于RPM的系统 # 或对于Debian/Ubuntu系统: # apt-get install -y subversion libapache2-svn apache2
安装完成后验证版本:
svnserve --version
应显示类似"svnserve, version 1.14.1 (r1886600)"的输出。
创建版本库
-
创建仓库目录
选择合适的位置存储版本库,例如/var/svn:
(图片来源网络,侵删)mkdir -p /var/svn svnadmin create /var/svn/project1
-
配置文件结构
执行上述命令后,会生成以下关键目录和文件:/var/svn/project1/ ├── conf/ # 配置文件目录 │ ├── svnserve.conf # 主配置文件 │ ├── passwd # 用户密码文件 │ └── authz # 权限控制文件 ├── db/ # 版本数据存储 ├── hooks/ # 钩子脚本目录 └── format # 仓库版本标识
核心配置详解
主配置文件(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)
编辑passwd文件添加用户:

[users] user1 = password123 user2 = securePass456
每行格式为用户名 = 密码,密码明文存储。
权限控制(authz)
通过authz文件实现精细化的目录权限控制,示例配置如下:
[groups] admin = user1 dev = user1,user2 [/] @admin = rw * = r [/trunk] @dev = rw [/branches] @dev = r
说明:
[groups]定义用户组- 表示仓库根目录
rw表示读写,r表示只读,表示无权限- 表示所有用户
服务启动与访问
独立服务模式
使用svnserve以独立模式启动服务:
svnserve -d -r /var/svn --listen-port 3690
参数说明:
-d:后台守护进程运行-r:指定仓库根目录--listen-port:自定义监听端口(默认3690)
Apache集成模式(可选)
若需要通过WebDAV访问,需配置Apache,编辑/etc/httpd/conf.d/subversion.conf:
<Location /svn>
DAV svn
SVNParentPath /var/svn
AuthType Basic
AuthName "SVN Repository"
AuthUserFile /etc/svn-users
Require valid-user
</Location>
创建密码文件并重启Apache:
htpasswd -cm /etc/svn-users user1 systemctl restart httpd
常见操作与维护
-
仓库备份
使用svnadmin hotcopy命令创建热备份:svnadmin hotcopy /var/svn/project1 /backup/svn/project1_$(date +%Y%m%d)
-
仓库升级
当SVN版本升级时,需执行:svnadmin upgrade /var/svn/project1
-
日志管理
在svnserve.conf中添加日志配置:[general] log-file = /var/log/svn/svnserve.log
确保日志目录存在且可写:
mkdir -p /var/log/svn && touch /var/log/svn/svnserve.log chown -R apache:apache /var/log/svn # 若使用Apache
防火墙与SELinux配置
-
开放端口
firewall-cmd --permanent --add-port=3690/tcp firewall-cmd --reload
-
SELinux设置
若启用SELinux,需设置相应上下文:semanage port -a -t svn_port_t -p tcp 3690 chcon -R -t svnserve_data_t /var/svn
相关问答FAQs
Q1: 如何修改已创建用户的密码?
A1: 直接编辑passwd文件,找到对应行修改密码值即可,例如将user1 = oldpass改为user1 = newpass,无需重启SVN服务(独立模式)或只需重启Apache(集成模式)。
Q2: SVN服务启动后客户端连接超时怎么办?
A2: 检查以下三点:
- 防火墙是否放行3690端口(
netstat -tuln | grep 3690) - SELinux是否阻止访问(
sestatus -b | grep svnserve) - 仓库权限是否正确(
ls -ld /var/svn/project1应为755)
若问题依旧,尝试用strace -e trace=network svn list svn://localhost调试网络连接。
