序言
- SVN 官网: Apache Subversion Binary Packages
- SVN 客户端: 下载 · TortoiseSVN - TortoiseSVN 软件
本篇文章只介绍如何在 Linux 服务器上安装 SVN,客户端工具的使用不做介绍。 下面的文章以 Centos 8 系统来做为 Linux 服务器,对于其他版本的服务器可以参考官方文档。
检查环境
查看系统下有没有安装过或有安装过老版本的 SVN,如果没有安装,则什么都不会显示
text
[root@localhost ~]# rpm -ql subversion
未安装软件包 subversion
如果有老版本的话先删除一下老版本
csharp
[root@localhost opt]# yum -y remove subversion
未找到匹配的参数: subversion
没有软件包需要移除。
依赖关系解决。
无需任何处理。 完毕!
[root@localhost opt]#
下载安装
我这里建议通过 docker 来安装 svnserver
bash
# 下载镜像
docker pull garethflowers/svn-server
# 创建svn仓库目录,进入svn仓库目录, 用于挂载数据
mkdir -p /var/svn/repos /var/svn/conf
启动svn容器
javascript
docker run -d \
--name svn-server \
-p 3690:3690 \
-v /var/svn/repos:/var/opt/svn \
-v /var/svn/conf:/etc/subversion \
--restart=always \
garethflowers/svn-server
参数说明:
-p 3690:3690
:映射 SVN 默认端口-v
:挂载本地目录到容器,实现数据持久化--restart=always
:设置容器随 Docker 自动启动
创建项目和配置权限
创建项目需要进入 SVN 容器内部创建,命令为: docker exec -it svn-server /bin/sh
成功后的界面如下:
csharp
[root@localhost svn]# docker exec -it svn-server /bin/sh
/ #
接下来我们创建一个仓库,并配置用户和读写权限 svnadmin create /var/opt/svn/myproject
这里仓库就已经创建完毕了,这个仓库会同步到主机的 /var/svn/repos
目录下。
csharp
[root@localhost repos]# pwd
/var/svn/repos
[root@localhost repos]# ll
总用量 4 drwxr-xr-x. 6 root root 4096 8月 20 10:15 myproject
[root@localhost repos]#
接下来,我们来进行 SVN 仓库的配置,仓库的配置文件就位于 conf 目录下
这里有三个重要的配置文件
- authz: 负责账号权限的管理,控制账号是否读写权限
- passwd: 负责账号和密码的用户名单管理
- svnserve.conf: svn 服务器配置文件
配置用户密码
编辑 passwd 文件, 添加两个用户, 格式为:用户名 = 密码

配置权限控制
这里通过用户组来进行权限控制,单个用户的控制比较麻烦,不进行演示,在公司里面大多都是以用户组来控制权限的。auhtz配置文件中的每个参数,开头不能有空格,对于组要以@开头,用户不需要。
[groups]
部分:定义用户组
ini
# 这里两个用户分别对应上面创建的用户
[groups]
admin_group = admin
test_group = test
- 作用:将多个用户归类到 "用户组",方便批量管理权限(避免对每个用户单独设置权限)。
- 格式:
组名 = 用户名1,用户名2,...
(多个用户用逗号分隔,无空格)。 - 示例说明:
admin_group = admin
:创建一个名为admin_group
的组,包含用户admin
(这个用户需在passwd
文件中已定义)。test_group = test
:创建一个名为test_group
的组,包含用户test
(同样需在passwd
中存在)。
[权限规则部分]
:控制访问范围和权限
ini
[/]
@admin_group = rw
@test_group = r
* =
[/]
:表示权限作用的范围。/
代表仓库的根目录 。这个地方不要误解, 这个表示对于每个仓库自身的根目录- 如果想针对某个特定仓库配置权限(而非所有仓库),可以写成
[仓库名:/]
,例如[myproject:/]
表示只对myproject
仓库生效。
- 如果想针对某个特定仓库配置权限(而非所有仓库),可以写成
- 权限规则说明:
@admin_group = rw
:@
符号表示 "用户组",这条规则表示admin_group
组的所有用户对/
范围有rw
权限。rw
是权限组合:r
(read,读权限,可检出、更新代码)和w
(write写权限,可提交、修改代码)。
@test_group = r
:test_group
组的用户只有r
权限(只能看代码,不能修改提交)。* =
:*
表示 "所有未匹配的用户 / 组",=
表示 "无任何权限"。这条规则是安全兜底,确保除了上面明确授权的用户组,其他用户无法访问。
更精细的权限控制
如果需要对仓库的子目录设置不同权限(例如只允许某个组修改特定目录),可以添加更具体的规则,例如:
ini
# 对 myproject 仓库的 /trunk 目录设置权限
[myproject:/trunk]
@admin_group = rw # 管理员可读写
@dev_group = r # 开发组只读
# 对 myproject 仓库的 /branches/dev 目录设置权限
[myproject:/branches/dev]
@dev_group = rw # 开发组可读写该分支
@admin_group = rw # 管理员仍有读写权限
* = # 其他用户无权限
配置 svnserve.conf
编辑 svnserve.conf ,内容参考如下:
ini
# force-username-case = none
# 匿名访问的权限 可以是read、write,none,默认为read
anon-access = none
#使授权用户有写权限,前提是 authz 文件中也允许
auth-access = write
#指定用户密码文件的路径
password-db = passwd
#访问控制文件
authz-db = authz
#认证命名空间,SVN会在认证提示里显示,并且作为凭证缓存的关键字,应该具有唯一性
realm = /var/svn/tes
测试
上述配置修改完后,重启 docker 容器,接下来,我们使用 admin 用户来测试修改提交代码

完成后,我们使用 admin 用户随便创建一个文件并提交,然后使用 test 用户拉去尝试修改,试试能否成功,不能成功才是对的,因为 test 用户只有读的权限。这里大家自己尝试一下就可以了,我就不截图一个一个的演示了。