- 安装 SVN 服务
- 创建版本库
- 配置用户权限
- 配置防火墙与 SELinux
- 启动并设置开机自启
- 客户端连接测试
- 常用管理命令
第 0 步:准备工作
确保您拥有一台已经安装好 CentOS 7 (或类似 RHEL/CentOS 系统) 的服务器,并且拥有 root 或 sudo 权限。

# 检查系统版本 cat /etc/redhat-release # 输出应为类似 "CentOS Linux release 7.9.2009 (Core)" # 更新系统软件包 sudo yum update -y
第 1 步:安装 SVN 服务器
在 CentOS 7 中,SVN 服务通常由 subversion 和 subversion-devel 软件包提供。httpd (Apache) 是可选的,但我们这里先介绍更简单、更常用的独立服务器模式 (svnserve)。
# 使用 yum 安装 subversion sudo yum install -y subversion
安装完成后,可以验证一下版本:
svnserve --version
第 2 步:创建版本库
版本库是 SVN 用来存放代码和数据的地方,我们通常会在 /var/svn 目录下创建它。
-
创建 SVN 根目录
(图片来源网络,侵删)sudo mkdir -p /var/svn
-
创建一个新的版本库 我们以创建一个名为
myproject的项目为例。sudo svnadmin create /var/svn/myproject
执行此命令后,
/var/svn/myproject目录下会自动生成一系列文件和文件夹,如conf,db,hooks,locks等。 -
设置版本库目录的所有者 为了方便管理,我们将这个目录的所有者设置为当前运行
svnserve服务的用户(通常是apache或root),这里我们设置为root。sudo chown -R root:root /var/svn/myproject
第 3 步:配置用户和权限
SVN 的用户和权限信息存储在版本库的 conf 目录下,我们需要编辑三个核心文件。

-
进入版本库的配置目录
cd /var/svn/myproject/conf
-
编辑
passwd文件:添加用户 这个文件用于定义 SVN 的用户名和密码,格式为用户名 = 密码。sudo vi passwd
在文件末尾添加两个用户,
dev1和dev2:[users] # harry = harryssecret # sally = sallyssecret dev1 = password123 dev2 = anotherpass
-
编辑
authz文件:配置权限 这个文件用于定义用户对版本库中不同路径的访问权限(读r,写w)。sudo vi authz
在文件末尾添加如下配置:
[/] # 根目录下的所有路径 dev1 = rw dev2 = r # 可以设置一个管理员组 # [groups] # admin = dev1 # [/] # @admin = rw
[/]表示整个版本库的根目录。dev1 = rw表示用户dev1对根目录及其所有子目录有读写权限。dev2 = r表示用户dev2只有读权限。
-
编辑
svnserve.conf文件:启用认证 这是 SVN 服务器的核心配置文件,它告诉svnserve去哪里查找用户和权限信息。sudo vi svnserve.conf
找到并修改/取消注释以下几行,确保它们指向正确的配置文件:
[general] # 这行必须启用,告诉 svnserve 使用哪个权限配置文件 authz-db = authz # 这行必须启用,告诉 svnserve 使用哪个密码文件 password-db = passwd # 这行用于指定匿名用户的权限,默认是只读,我们设为无权限更安全 # anon-access = none # auth-access = write # 这行通常已经存在且被注释,确保它是启用的
重要提示: svnserve.conf 文件中,所有以 开头的都是注释。取消注释这些行时,务必确保行首没有多余的空格,否则会导致配置不生效。
第 4 步:配置防火墙与 SELinux
为了能从外部访问 SVN 服务器,我们需要开放相应的端口,并正确配置 SELinux。
-
开放 SVN 端口
svnserve默认使用 3690 端口。# 永久开放 3690 端口 sudo firewall-cmd --permanent --add-port=3690/tcp # 重新加载防火墙使配置生效 sudo firewall-cmd --reload
-
配置 SELinux (非常重要!) 默认情况下,SELinux 会阻止
svnserve访问/var/svn这样的目录,我们需要为它设置正确的安全上下文。# 为 /var/svn 目录设置正确的 SELinux 上下文 sudo semanage fcontext -a -t svnrhapsody_content_t "/var/svn(/.*)?" # 应用上述上下文设置 sudo restorecon -Rv /var/svn
- 如果系统没有安装
semanage工具(通常在policycoreutils-python包中),可以先安装它:sudo yum install -y policycoreutils-python
- 如果上面的命令执行后问题依旧,可以尝试一个更宽松的设置(不推荐用于生产环境):
sudo chcon -R -t public_content_rw_t /var/svn
- 如果系统没有安装
第 5 步:启动 SVN 服务并设置开机自启
-
启动
svnserve服务 我们使用-d选项让它以守护进程模式在后台运行,-r选项指定版本库的根目录。# -d: 后台运行 # -r: 指定版本库根目录,这样用户就可以通过 svn://IP/myproject 访问 # --listen-port: 指定端口,默认是 3690 svnserve -d -r /var/svn
-
检查服务状态
# 检查端口是否监听 netstat -tuln | grep 3690 # 或者使用 ss 命令 (新版本推荐) ss -tuln | grep 3690 # 输出应为类似 tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN
-
设置开机自启 为了让服务器重启后 SVN 服务能自动启动,我们可以创建一个 systemd 服务文件。
sudo vi /etc/systemd/system/svnserve.service
写入文件:
[Unit] Description=Subversion protocol daemon After=network.target [Service] Type=forking User=root Group=root 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 # 检查服务状态 sudo systemctl status svnserve.service
第 6 步:客户端连接测试
您可以从任何一台安装了 SVN 客户端的机器(Windows, Linux, macOS)来访问这个服务器了。
SVN 的客户端命令是 svn。
-
检出项目到本地 假设您的服务器 IP 是
168.1.100。# svn://服务器IP/版本库名称 svn checkout svn://192.168.1.100/myproject
系统会提示您输入用户名和密码:
Authentication realm: <svn://192.168.1.100:3690> 1234567890 Username: dev1 Password: <在这里输入 dev1 的密码> -
测试写入权限 进入检出的
myproject目录,添加一个新文件并尝试提交。cd myproject echo "Hello from dev1" > test.txt svn add test.txt svn commit -m "dev1 adds a test file"
这次同样需要输入
dev1的密码,如果提交成功,说明dev1的写权限配置正确。 -
测试只读权限 切换到另一个用户(
dev2)的 shell 或终端,再次尝试检出:svn checkout svn://192.168.1.100/myproject myproject_dev2
使用
dev2的密码登录。dev2可以检出,但如果尝试修改并提交,会收到权限错误。
第 7 步:常用管理命令
-
查看版本库信息
svnlook info /var/svn/myproject
-
查看日志
svnlook log /var/svn/myproject
-
导出版本库
# 导出整个库到一个临时目录 svnadmin dump /var/svn/myproject > myproject_backup.svn.dump
-
导入备份
# 创建一个新库来恢复 svnadmin create /var/svn/myproject_restore # 导入备份 svnadmin load /var/svn/myproject_restore < myproject_backup.svn.dump
-
修改用户密码 只需编辑
/var/svn/myproject/conf/passwd文件,修改对应用户的密码行,然后重启svnserve服务即可。
至此,您已经成功在 Linux 下搭建并配置好了一个功能完整的 SVN 服务器。
