linux上搭建svn多仓库环境

一、前言

有条件的还是建议用GIT,如果我带团队, 也一定会主推GIT

以下是我认为svn无法取代git的优点

  • SVN的分支是对某个分支或者主干的拷贝,而GIT的分支是创建一个指针,创建分支和切换分支非常迅速

  • GIT更优越的工作流, 存在本地库的概念,我可以在本地建立自己的分支,形成自己的版本库,而SVN必须有服务器才能工作

二、环境搭建

2.1 环境

  • ubuntu 18.04 腾讯云服务器

  • svn 1.9.7 版本

  • XShell 7

2.2 安装过程

还是通过ubuntu的软件管理工具apt-get进行安装, 首先要更新一下

1
apt-get update

安装

1
apt-get install subversion

通过 svn --version 验证svn是否安装成功, 能显示版本号就是安装成功

1
svn --version

三、创建SVN库

3.1 创建svn仓库

我习惯放在home路径下, 看个人习惯

1
mkdir /home/svn/repositories

因为有多个项目, 因此先创建他们的根目录, 并分配读写权限

1
chmod -R 777 /home/svn/repositories

3.2 创建多项目

因为大部分公司不可能只有一个项目, 因此这里建立多项目

然后再在repositories下建立第一个项目的仓储

1
svnadmin create /home/svn/projects/project1

查看一下文件信息

1
ll /home/svn/projects/project1

可以查看到多了confdbformathookslocksREADME.txt

然后类似我们建立第二个项目

1
svnadmin create /home/svn/projects/project2

3.3 统一管理多项目

为了控制两个项目的权限, 我们将账户密码和授权文件放到项目根目录下

两个方式, 第一种方式通过ftp将project1或者project2下conf文件夹中的authz和passwd放到两个项目的根目录中, 也就是/home/svn/projects

也可以通过cp命令一次将两个文件移动到根目录下

1
cp /home/svn/projects/project1/conf/authz /home/svn/projects/project1/conf/passwd /home/svn/projects

然后分别修改两个项目中/conf/svnserve.conf文件

1
2
3
4
5
6
7
8
9
## 未登录不可以访问
anon-access = none
## 授权后可以读写
auth-access = write
## 指定验证文件路径
password-db = /home/svn/projects/passwd
authz-db = /home/svn/projects/authz
## 说实话我不知道这个有没有必要改, 改的话对应项目名称即可
realm = project1

这样两个项目都依赖父文件夹的authzpasswd了, 方便统一授权和管理

3.4 管理账户密码以及授权

分配账号

1
vim /home/svn/projects/passwd

分配所有人的账号

1
suhao = 123456

管理授权

1
vim /home/svn/projects/authz

没管理过svn, 个人感觉可以通过这种方式进行权限控制, 大佬勿喷

1
2
3
4
5
[groups]
[project1:/]
# suhao分配读写权限
# 或者* = rw也可以, 给所有人读写权限
suhao = rw

3.5 云服务器其他配置

配置防火墙

1
sudo ufw enable ## 启动防火墙
1
sudo ufw allow 3690 ## 开放svn默认的3690端口

配置云服务器出入规则(云防火墙)

访问控制台, 加入3690端口(TCP)限制即可

四、测试启动和检出

启动服务

1
svnserve -d -r /home/svn/project

检出, 客户端通过

1
svn://ip/project ## 检出project1

这里通过suhao账号可以正常检出, 也可以正常提交

至此, svn配置结束

五、初步理解

以下部分是我作为初学者的一点理解

svn启动命令是这样的

1
svnserve -d -r /home/svn/repositories --listen-port 3690

有点类似http的静态服务, 我搭建一个静态服务器, 指定服务器本地路径, 就可以为这些路径下的文件提供http服务

svn是不是也是这样的呢?

希望明白的大佬指点一下~