凌峰创科服务平台

Linux下搭建SVN服务器,步骤详解如何操作?

目录

  1. 前言:为什么选择SVN?
  2. 准备工作
  3. 安装SVN服务器
  4. 创建版本库
  5. 配置用户权限
  6. 配置SVN服务
  7. 启动、开机自启与检查
  8. 客户端连接测试
  9. 进阶配置:使用HTTP/HTTPS访问
  10. 常见问题与解决方案

前言:为什么选择SVN?

Subversion (SVN) 是一个开源的版本控制系统,用于管理文件和目录的变更,尽管Git目前已成为绝对的主流,但SVN因其集中式管理的特性,在许多企业级项目、需要严格权限控制和历史记录追溯的场景中仍然被广泛使用。

Linux下搭建SVN服务器,步骤详解如何操作?-图1
(图片来源网络,侵删)

SVN的核心优势:

  • 集中式服务器:所有代码和版本历史都存储在中央服务器上,便于管理和备份。
  • 简单的学习曲线:对于习惯了CVS或没有分布式版本控制经验的用户来说,SVN的命令更直观。
  • 成熟的权限管理:通过 authz 文件可以精细地控制每个用户或用户组对不同目录的读写权限。
  • 稳定的文件版本:SVN以文件为单位进行版本控制,不像Git那样有暂存区的概念,对一些开发者来说更直接。

准备工作

  1. 一台Linux服务器:本手册以 CentOS 7 为例,也提供 Ubuntu/Debian 的命令。
  2. 拥有 root 权限或 sudo 权限的用户
  3. 确保服务器网络畅通,并能从客户端访问服务器的SVN端口(默认3690)或HTTP/HTTPS端口(80/443)。

安装SVN服务器

在 CentOS / RHEL / Rocky / AlmaLinux 上

使用 yum 包管理器安装。

# 更新软件包列表
sudo yum update -y
# 安装 Subversion
sudo yum install -y subversion

在 Ubuntu / Debian 上

使用 apt 包管理器安装。

# 更新软件包列表
sudo apt update && sudo apt upgrade -y
# 安装 Subversion
sudo apt install -y subversion

验证安装

Linux下搭建SVN服务器,步骤详解如何操作?-图2
(图片来源网络,侵删)

安装完成后,检查 svnserve 是否已安装。

svnserve --version

如果看到版本信息,说明安装成功。


创建版本库

SVN的版本库是存储项目代码和版本历史的地方,我们通常创建一个专门的目录来存放所有版本库。

创建版本库根目录

# 在 /var/svn 下创建版本库目录,这是一个常见的做法
sudo mkdir -p /var/svn

创建一个新的版本库

我们创建一个名为 myproject 的项目。

Linux下搭建SVN服务器,步骤详解如何操作?-图3
(图片来源网络,侵删)
# 使用 svnadmin 命令创建版本库
sudo svnadmin create /var/svn/myproject

设置目录所有者

为了避免权限问题,建议将版本库目录的所有者设置为运行SVN服务的用户(通常是 apachesvn),我们先创建一个 svn 用户。

# 创建 svn 用户 (CentOS/RHEL)
sudo useradd -m -s /bin/bash svn
# 创建 svn 用户 (Ubuntu/Debian)
sudo adduser --system --group --no-create-home svn

然后设置版本库目录的所有权。

sudo chown -R svn:svn /var/svn

你的版本库结构已经创建完成,位于 /var/svn/myproject


配置用户权限

SVN的用户认证和权限控制通过两个文件实现:passwdauthz

配置用户密码 (passwd)

这个文件用于存储用户名和密码的明文映射,它位于 每个版本库的 conf 目录下

编辑 /var/svn/myproject/conf/passwd 文件:

sudo vi /var/svn/myproject/conf/passwd

在文件末尾添加用户,格式为 用户名 = 密码

[users]
# harry = harryssecret
# sally = sallyssecret
admin = mysecretpassword1
developer = devpassword123
guest = guestpass

保存并退出。

配置访问权限 (authz)

这个文件用于定义用户和用户组对不同目录的访问权限,它同样位于 每个版本库的 conf 目录下

编辑 /var/svn/myproject/conf/authz 文件:

sudo vi /var/svn/myproject/conf/authz
[groups]
# 定义用户组
admin_group = admin
dev_group = developer
[/]
# 根目录的权限
@admin_group = rw      # admin_group 组对根目录有读写权限
* = r                  # 其他用户(包括未登录用户)只有读权限
# 禁止 guest 用户访问
[myproject:/trunk]
guest = 
# 给 developer 组对 branches 目录的读写权限
[myproject:/branches]
@dev_group = rw
# 给 admin 组对 tags 目录的读写权限
[myproject:/tags]
@admin_group = rw

authz 文件语法说明:

  • [groups]:定义用户组。
  • [项目路径]:定义对特定路径的权限,路径可以是 (整个库), /trunk, /branches/my-branch 等。
  • 用户名 = 权限r (read-only), rw (read-write), (无权限)。
  • @用户组名 = 权限:为整个用户组设置权限。
  • 代表所有用户。

配置SVN服务

SVN服务可以通过 svnserve 守护进程来运行,我们需要配置它的主配置文件。

编辑 全局的 svnserve.conf 文件。注意:这个文件在 /etc/subversion/ 目录下,而不是在版本库的 conf 目录里!

sudo vi /etc/subversion/svnserve.conf

确保以下配置项被正确设置,并去掉前面的 号注释:

[general]
# 匿名访问的权限,设置为 none 表示禁止匿名访问
anon-access = none
# 认证用户的权限,设置为 write 表示允许读写
auth-access = write
# 密码文件路径,指向我们刚刚创建的版本库的 passwd 文件
# 注意:这里的路径是相对于运行svnserve的用户家目录的,或者使用绝对路径
# 使用绝对路径是最稳妥的方式
password-db = /var/svn/myproject/conf/passwd
# 权限配置文件路径,同样使用绝对路径
authz-db = /var/svn/myproject/conf/authz
# realm(领域)用于在认证提示时显示给用户,通常设置为版本库名称
realm = My First Project Repository

重要提示svnserve.conf 文件中所有路径、键名、值都不能以行首的空格开始, 号两边最好有一个空格,配置文件中的注释(以 开头)会影响后续行的读取,确保要启用的配置行前没有注释。


启动、开机自启与检查

启动 svnserve 服务

# -d 表示以守护进程模式运行
# -r 指定版本库的根目录,这样用户就可以通过 svn://server/myproject 访问,而无需写全路径
sudo svnserve -d -r /var/svn

设置开机自启

为了确保服务器重启后SVN服务能自动运行,我们需要将其设置为系统服务。

对于使用 systemd 的系统 (CentOS 7+, Ubuntu 16.04+)

创建一个服务单元文件:

分享:
扫描分享到社交APP
上一篇
下一篇