Linux SVN服务器搭建与配置全指南(2025最新版,从零到精通)
** 本文详细介绍了在Linux系统(以CentOS 7为例)上从零开始搭建和配置Subversion(SVN)服务器的完整过程,内容涵盖环境准备、SVN安装、仓库创建、用户权限配置、多仓库管理、以及通过HTTP/Apache访问等核心步骤,旨在为开发者提供一份清晰、实用、可操作的实战指南。

引言:为什么在Linux上搭建SVN服务器?
在版本控制的世界里,Git无疑是当之无愧的王者,对于一些历史悠久的项目、或者对集中式管理有偏好的团队来说,Subversion(SVN)依然是一个稳定、可靠且功能强大的选择,SVN的集中式架构使得权限管理、版本历史追溯和代码审计变得异常简单。
本文将以当前企业中广泛使用的 CentOS 7 为例,手把手教你如何搭建一个功能完善的SVN服务器,无论你是系统管理员还是团队负责人,这份指南都能帮助你快速上手,告别代码管理的混乱时代。
准备工作:系统与环境要求
在开始之前,请确保你的Linux服务器满足以下基本条件:
- 操作系统: CentOS 7 / Red Hat Enterprise Linux 7 (或其他基于RHEL的发行版)
- 权限要求: 具有root权限或
sudo权限的用户账户 - 网络连接: 服务器可以访问互联网,用于下载安装包
- 硬件资源: 对硬件要求不高,普通的服务器配置即可
安装Subversion(SVN)
SVN通常在Linux发行版的官方软件仓库中都有提供,因此安装过程非常简单。

更新系统软件包 更新系统的软件包列表,确保我们安装的是最新版本。
sudo yum update -y
安装SVN服务端和客户端
使用yum命令同时安装SVN的服务端(subversion)和客户端工具(通常也包含在同一个包中)。
sudo yum install subversion -y
验证安装 安装完成后,可以通过以下命令检查SVN的版本号,以确认安装成功。
svnserve --version
如果看到版本信息输出,说明SVN已经成功安装在你的系统上。

创建SVN仓库
SVN的核心是“仓库”(Repository),它用于存储所有的文件和版本历史。
创建仓库存储目录
我们约定将所有SVN仓库存放在/var/svn目录下,首先创建这个目录。
sudo mkdir -p /var/svn
创建第一个仓库
假设我们要创建一个名为my_project的仓库,使用svnadmin命令进行创建。
sudo svnadmin create /var/svn/my_project
设置仓库目录所有者
为了方便后续配置,我们将仓库目录的所有者设置为当前运行命令的用户(例如apache用户,因为我们后续会通过Apache访问)。
sudo chown -R apache:apache /var/svn/my_project
查看仓库结构
创建成功后,进入my_project目录,你会看到一些自动生成的文件和文件夹,如conf, db, hooks, format等,这些都是SVN仓库正常工作所必需的。
配置SVN用户与权限
SVN的权限和用户信息存储在仓库的conf目录下,我们需要修改三个核心配置文件。
配置用户密码文件 (passwd)
passwd文件用于定义哪些用户可以访问仓库。
- 打开
passwd文件:sudo vi /var/svn/my_project/conf/passwd
- 在文件中,按照
[用户名] = 密码的格式添加用户。[users] # harry = sally # sally = harry admin = mysecretpassword developer = devpassword
注释掉的行是示例,我们添加了
admin和developer两个用户。
配置用户权限文件 (authz)
authz文件是SVN权限管理的核心,它精细地控制每个用户对不同仓库或目录的读写权限。
- 打开
authz文件:sudo vi /var/svn/my_project/conf/authz
- 在文件末尾添加以下配置:
[/] # 给admin用户读写权限 admin = rw # 给developer用户只读权限 developer = r # 或者给一个用户组分配权限 #[mygroup] #user1 = rw #user2 = rw
[/]表示对整个仓库的权限设置。rw表示读写权限。r表示只读权限。- 你还可以创建用户组进行统一管理,如示例中的
[mygroup]。
配置仓库主文件 (svnserve.conf)
这个文件是SVN仓库的全局配置,它决定了是否启用passwd和authz文件。
- 打开
svnserve.conf文件:sudo vi /var/svn/my_project/conf/svnserve.conf
- 修改以下几行,确保它们没有被注释掉(去掉行首的)并且值正确:
[general] # 使用我们上面创建的密码文件 password-db = passwd # 使用我们上面创建的权限文件 authz-db = authz # 匿名用户无任何权限 anon-access = none # 认证用户拥有读写权限(这个会被authz文件覆盖,但设置成更安全) auth-access = write
设置配置文件权限
为了保证安全性,conf目录下的配置文件应该只能被apache用户(或root)读取和写入。
sudo chmod -R 700 /var/svn/my_project/conf
启动SVN服务并配置开机自启
我们已经完成了仓库和用户权限的配置,可以启动SVN服务了。
启动SVN服务
svnserve是SVN的独立守护进程,我们指定它监听在3690端口(SVN默认端口),并以-d(守护进程模式)和-r(指定仓库根目录)方式运行。
sudo svnserve -d -r /var/svn
检查SVN服务状态
使用netstat或ss命令检查3690端口是否正在监听。
# 使用netstat sudo netstat -tulnp | grep 3690 # 或者使用ss (CentOS 7推荐) sudo ss -tulnp | grep 3690
如果看到类似LISTEN 0 5 *:3690 *:*的输出,说明服务已成功启动。
配置开机自启 为了确保服务器重启后SVN服务能自动运行,我们需要将其添加到系统服务中。 创建一个新的服务文件:
sudo vi /etc/systemd/system/svnserve.service ```粘贴到文件中: ```ini [Unit] Description=Subversion protocol daemon After=network.target [Service] Type=forking User=apache Group=apache ExecStart=/usr/bin/svnserve -d -r /var/svn ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure [Install] WantedBy=multi-user.target
启用并启动该服务:
# 重新加载systemd sudo systemctl daemon-reload # 启用服务(开机自启) sudo systemctl enable svnserve.service # 立即启动服务 sudo systemctl start svnserve.service
SVN客户端连接与测试
服务器已经搭建好了,现在我们用SVN客户端来测试一下。
检出仓库
假设你的服务器IP地址是 168.1.100,你可以使用以下命令将仓库my_project检出(下载)到本地。
svn checkout svn://192.168.1.100/my_project
系统会提示你输入用户名和密码,分别输入我们之前设置的admin和mysecretpassword。
提交文件
- 在
my_project目录下创建一个新文件,例如README.txt。 - 使用
svn add命令将新文件加入版本控制。svn add README.txt
- 使用
svn commit命令提交文件到服务器。svn commit -m "Initial commit: Add README file"
同样需要输入密码,如果提交成功,说明你的SVN服务器已经可以正常工作了!
(可选)通过Apache访问SVN仓库
虽然svnserve已经足够,但通过Apache(WebDAV)访问SVN仓库可以更好地与现有Web服务集成,并支持HTTPS加密。
安装Apache和SVN模块
sudo yum install httpd mod_dav_svn -y
创建SVN配置文件 在Apache的配置目录下为我们的仓库创建一个配置文件。
sudo vi /etc/httpd/conf.d/svn.conf
# 创建SVN虚拟主机 <Location /svn/my_project> DAV svn SVNPath /var/svn/my_project AuthType Basic AuthName "My SVN Repository" AuthUserFile /etc/svn-users Require valid-user </Location>
DAV svn:启用SVN模块。SVNPath:指定SVN仓库的物理路径。AuthUserFile:指定一个存放用户名和密码的文件(与passwd文件不同)。
创建Apache认证用户 我们需要为Apache创建一个独立的用户认证文件。
# 创建并设置用户密码 sudo htpasswd -cm /etc/svn-users admin
系统会提示你为admin用户设置一个密码,注意,-c选项会创建新文件,如果后续要添加其他用户,请去掉-c,否则会覆盖原有文件。
启动并启用Apache服务
sudo systemctl start httpd sudo systemctl enable httpd
配置防火墙 如果开启了防火墙,需要开放HTTP(80)和HTTPS(443)端口。
sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
测试Web访问
你可以通过浏览器访问 http://你的服务器IP/svn/my_project,浏览器会弹出认证窗口,输入你刚刚创建的用户名和密码即可。
总结与常见问题
至此,我们已经成功在Linux(CentOS 7)上搭建了一个功能完整的SVN服务器,它既可以通过独立的svnserve端口(3690)访问,也可以通过Apache(80端口)访问,并且实现了精细的用户和权限管理。
常见问题(FAQ):
-
Q: 连接SVN服务器时提示“Could not connect to the server”怎么办?
- A: 首先检查SVN服务是否运行(
ss -tulnp | grep 3690),如果未运行,请重新启动,如果已运行,检查服务器防火墙是否放行了3690端口。
- A: 首先检查SVN服务是否运行(
-
Q: 提交代码时提示“authorization failed”怎么办?
- A: 99%的情况是
svnserve.conf或authz文件配置有误,请仔细检查文件中的password-db、authz-db路径是否正确,以及authz文件中的用户名和权限设置是否准确。
- A: 99%的情况是
-
Q: 如何创建多个仓库?
- A: 只需重复 第四步 的操作,在
/var/svn目录下创建新的文件夹,然后用svnadmin create命令初始化即可,每个仓库都是独立的,拥有自己的conf目录。
- A: 只需重复 第四步 的操作,在
-
Q: SVN和Git应该如何选择?
- A: 对于新项目,特别是分布式团队或开源项目,Git是首选,但对于需要严格中央控制、权限审计,或者与Windows系统集成度要求高的环境,SVN依然是一个非常好的选择。
希望这份详尽的指南能帮助你顺利搭建自己的SVN服务器!如果过程中遇到任何问题,欢迎在评论区留言讨论。
