在 CentOS 系统上搭建并开启 Subversion (SVN) 服务,是实现团队代码版本控制和协作开发的常见需求,SVN 作为一款集中式的版本控制系统,以其稳定性和易用性被广泛采用,本文将详细介绍在 CentOS 环境下,从安装到配置,再到启动服务的完整流程,帮助您快速构建一个可用的 SVN 服务器。

第一步:安装 Subversion
在开始之前,请确保您拥有 sudo 或 root 权限,CentOS 提供了方便的包管理器 yum(在较新版本中为 dnf,但 yum 命令通常仍可用作别名)来安装软件。
打开终端,执行以下命令来安装 SVN 及其相关模块:
sudo yum install subversion -y
该命令会自动从官方软件源下载并安装最新稳定版的 Subversion,安装完成后,您可以通过 svnserve --version 命令来验证是否安装成功,如果能看到版本信息,则表示安装无误。
第二步:创建 SVN 仓库
SVN 仓库是存储所有项目文件和版本历史的地方,我们会将其创建在一个专门的目录下,/svn。
-
创建主目录:
sudo mkdir /svn
-
创建项目仓库:
假设我们要为一个名为myproject的项目创建仓库,执行以下命令:sudo svnadmin create /svn/myproject
执行后,
/svn/myproject目录下会生成一系列文件和子目录,包括conf、db、hooks等。conf目录是我们接下来配置的重点。
第三步:配置 SVN 仓库
SVN 的核心配置主要集中在 /svn/myproject/conf/ 目录下的三个文件:svnserve.conf(主配置文件)、passwd(用户密码文件)和 authz(权限控制文件)。
1 配置用户密码 (passwd)
编辑 passwd 文件,在 [users] 标签下添加 SVN 用户和密码,格式为 用户名 = 密码。

sudo vi /svn/myproject/conf/passwd
[users] harry = harryssecret sally = sallyssecret
这里我们创建了两个用户:harry 和 sally。
2 配置访问权限 (authz)
编辑 authz 文件来精细控制用户或用户组对仓库目录的读写权限。
sudo vi /svn/myproject/conf/authz
可以设置用户组和具体路径的权限,
[groups] dev_team = harry, sally [/] @dev_team = rw * = r
此配置表示:
[groups]定义了一个名为dev_team的用户组,包含harry和sally。[/]表示对仓库根目录的权限设置。@dev_team = rw表示dev_team组的成员拥有读写(rw)权限。* = r表示其他所有用户()拥有只读(r)权限,如果希望禁止匿名访问,可以设置为 或不配置此项。
3 启用认证与授权 (svnserve.conf)
这是最关键的一步,需要告诉 svnserve 服务使用我们刚刚配置的密码和权限文件。
sudo vi /svn/myproject/conf/svnserve.conf
找到并修改(或取消注释)以下几行:
[general] # 禁止匿名访问,设为 none 可增强安全性 anon-access = none # 授权用户可写 auth-access = write # 指定密码文件路径 password-db = passwd # 指定权限文件路径 authz-db = authz # 认证域,一个提示性的名称 realm = My Project Repository
注意: 配置项前不能有空格,否则会导致服务启动失败。
下表小编总结了 svnserve.conf 的关键配置项:
| 配置项 | 值示例 | 说明 |
|---|---|---|
anon-access |
none, read, write |
控制匿名用户的访问权限,推荐设为 none。 |
auth-access |
write, read |
控制已认证用户的访问权限,通常设为 write。 |
password-db |
passwd |
指定用户密码文件的相对路径。 |
authz-db |
authz |
指定路径授权文件的相对路径。 |
realm |
My Project |
认证域名称,会在客户端认证时显示。 |
第四步:启动 SVN 服务
配置完成后,就可以启动 svnserve 服务了,我们使用 -d 参数使其以守护进程模式在后台运行,并使用 -r 参数指定 SVN 服务的根目录。

svnserve -d -r /svn
-d: 表示后台运行。-r /svn: 将/svn设置为服务的根目录,这样做的好处是,客户端访问时可以直接使用svn://服务器IP/myproject,而无需包含完整的路径/svn/myproject。
启动后,可以使用 ps aux | grep svnserve 或 netstat -tuln | grep 3690 命令检查服务是否正在运行,SVN 的默认端口是 3690。
第五步:配置防火墙
如果服务器的防火墙(firewalld)是开启状态,需要放行 SVN 服务的端口,否则外部客户端无法连接。
# 永久开放 3690 端口 sudo firewall-cmd --permanent --add-port=3690/tcp # 重新加载防火墙规则使配置生效 sudo firewall-cmd --reload
至此,您的 CentOS SVN 服务器已经成功开启并运行,客户端可以通过 svn://<您的服务器IP地址>/myproject 的地址来访问仓库。
相关问答 FAQs
我修改了 conf 目录下的配置文件,但新的设置没有生效,这是为什么?
解答: svnserve 服务在启动时会一次性读取配置文件到内存中,当您修改了 svnserve.conf、passwd 或 authz 文件后,需要重启 svnserve 服务才能使更改生效,重启步骤如下:
- 查找并杀死当前运行的
svnserve进程:sudo pkill svnserve
- 重新启动服务:
svnserve -d -r /svn
完成这两步后,新的配置就会被加载并应用。
我忘记了某个 SVN 用户的密码,该如何重置?
解答: SVN 的用户密码是以明文形式存储在 passwd 文件中的,重置密码非常简单。
- 使用文本编辑器打开密码文件:
sudo vi /svn/myproject/conf/passwd
- 找到需要重置密码的用户行(
harry = harryssecret),直接修改等号后面的新密码即可(harry = newpassword123)。 - 保存文件并退出。
修改密码文件后,建议重启svnserve服务以确保所有连接都使用新的认证信息,虽然有时不重启也能生效,但重启是最稳妥的做法。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!