在Linux系统中搭建SVN(Subversion)服务器是许多团队进行版本控制管理的常见需求,SVN作为集中式版本控制工具,能够有效管理代码、文档等文件的变更历史,以下是详细的搭建步骤及配置说明,以CentOS 7系统为例,其他Linux发行版命令可能略有差异,但核心逻辑一致。

安装SVN服务
首先需要确保系统已更新至最新状态,然后通过yum包管理器安装SVN服务,打开终端,执行以下命令:
sudo yum update -y sudo yum install subversion -y
安装完成后,通过svnserve --version命令验证是否安装成功,若显示版本信息则表示安装成功。
创建SVN仓库
SVN仓库用于存储版本数据,建议创建在专门目录下,如/var/svn,首先创建目录:
sudo mkdir -p /var/svn
使用svnadmin create命令创建仓库,例如创建一个名为project_repo的仓库:

sudo svnadmin create /var/svn/project_repo
创建后,进入仓库目录会看到conf、db、hooks、locks等子目录,其中conf目录包含核心配置文件。
配置仓库访问权限
进入仓库的conf目录,修改三个关键配置文件:svnserve.conf、passwd和authz。
-
编辑svnserve.conf
该文件是SVN服务的主配置文件,需启用匿名访问控制、用户认证和权限文件,使用以下命令打开文件:sudo vim /var/svn/project_repo/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/project_repo/conf/passwd
按格式添加用户,
[users] user1 = password1 user2 = password2
-
编辑authz
该文件用于配置用户和组的访问权限,支持路径级别的权限控制,打开文件:sudo vim /var/svn/project_repo/conf/authz
示例配置如下:
[groups] admin = user1 developer = user2 [/] @admin = rw user2 = r [project_repo:/trunk] @developer = rw
上述配置表示:
admin组对整个仓库有读写权限,user2只有读权限;developer组对trunk目录有读写权限。
配置SVN服务
SVN服务可通过svnserve守护进程运行,默认端口为3690,首先创建服务启动脚本,或直接使用命令行启动。
-
启动SVN服务
在终端执行以下命令,指定仓库根目录和监听地址:sudo svnserve -d -r /var/svn
参数说明:
-d表示以守护进程模式运行,-r指定仓库根目录,此时访问路径为svn://IP地址/project_repo。 -
设置开机自启
若需服务开机自动启动,可创建systemd服务文件,创建/etc/systemd/system/svnserve.service如下:[Unit] Description=Subversion Protocol Daemon After=network.target [Service] Type=forking ExecStart=/usr/bin/svnserve -d -r /var/svn ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure [Install] WantedBy=multi-user.target
保存后执行以下命令启用服务:
sudo systemctl daemon-reload sudo systemctl enable svnserve sudo systemctl start svnserve
防火墙与SELinux配置
为确保SVN服务能被外部访问,需开放3690端口并配置SELinux策略。
-
开放防火墙端口
sudo firewall-cmd --permanent --add-port=3690/tcp sudo firewall-cmd --reload
-
配置SELinux
若SELinux处于启用状态,需设置SVN相关策略:sudo setsebool -P svnserve_can_network_connect on
客户端测试
使用SVN客户端工具(如TortoiseSVN或命令行)连接服务器,以命令行为例:
svn checkout svn://服务器IP地址/project_repo --username user1
输入密码后,若成功检出仓库内容,则表示搭建完成。
仓库维护与管理
-
备份仓库
定期备份仓库数据,可通过svnadmin hotcopy命令创建热备份数据:sudo svnadmin hotcopy /var/svn/project_repo /backup/svn/project_repo_backup
-
修改配置后重启服务
修改仓库配置后,需重启svnserve服务使配置生效:sudo systemctl restart svnserve
以下是SVN服务器搭建过程中常见问题及解答:
FAQs
-
问题:客户端连接SVN服务器时提示“Could not open the requested SVN filesystem”
解答:通常是由于仓库权限配置错误或svnserve.conf文件格式问题导致,检查svnserve.conf中anon-access和auth-access是否正确设置,确认password-db和authz-db路径无误,并确保配置文件无多余空格或特殊字符,检查仓库目录权限,确保运行svnserve的用户(如root或apache)有读写权限。 -
问题:如何为不同仓库配置不同的认证域?
解答:在启动svnserve时,可通过--realm参数为每个仓库指定不同的认证域,若有两个仓库repo1和repo2,分别启动服务时使用不同realm值:sudo svnserve -d -r /var/svn/repo1 --realm "Repo1 Realm" sudo svnserve -d -r /var/svn/repo2 --realm "Repo2 Realm"
注意:不同仓库需使用不同的端口或进程运行,避免冲突,也可通过配置多个
svnserve.service单元文件实现多仓库管理。
