SVN 学习记录

subversion 是一个集中式的版本管理系统,它拓扑结构为星状网络,可以架构在 Mac, win, linux系统上。可以在任意操作系统中使用客户端访问有任意系统搭建的服务端。

一般情况下个人不需要安装 svn 的服务器端,只需要安装客户端即可。本文顺带记录了Windows 下的安装。重点放在Linux下。

SVN 的安装

Windows

根据需要,百度到相关软件的官网下载响应的安装包安装即可

Linux

Subversion 软件包内已包含服务端客户端
无论是建仓库还是装客户端安装一个subversion就够了。

Ubuntu

1
sudo apt install subversion

CentOS

1
yum install subversion

服务端命令与客户端命令

服务端命令

  • svnserver - 控制svn系统服务的启动等
  • svnadmin - 版本库的创建/导出/导入/删除等
  • svnlook - 查看版本库的信息等

客户端命令

  • svn - 版本库的检出/更新/提交/重定向等

版本库的创建与删除

创建版本库

1
2
3
4
5
6
7
8
9
svnadmin create /path/repos

# 一些例子
mkdir /svnroot
svnadmin create /svnroot/imooc
cd /svnroot
svnadmin create imooc2
svnadmin create --fs-type dbd imooc3
svnadmin create --fs-type fsfs imooc4

删除版本库

只有在确定版本库已经确定不再需要的情况下才会删除它。直接使用Linux的删除命令。

1
rm -rvf /path/repos

版本库的配置及权限分组

配置文件位于 /path/repos/conf/

1
2
3
4
5
cd /svnroot/imooc/conf/
[root@localhost conf]# ls
authz -- 配置当前版本库的用户组以及用户组权限
passwd -- 配置允许访问当前版本库的用户名和密码
svnserve.conf -- 配置前版本库的默认权限、权限配置文件及密码配置文件

update (更新) 把svn服务器端的最新数据更新到svn客户端本地, svn服务端向svn客户端发送数据

commit (提交) svn客户端把本地数据提交到svn服务端。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
vi svnserve.conf
anon-access = none #没有账号用户访问权限设置,例如read 只能读 (可选值值为none什么干不了,read为只能读,write为可以读写即可以提交代码,)
auth-access = write #授权用户(有账号密码用户)访问权限,(例如可选值值为none什么干不了,read为只能读,write为可以读写即可以提交代码)

password-db = passwd # 指定用户名及密码的配置文件路径,路径使用绝对或者相对路径都可以 使用默认即可,该文件必须具有可读写权限
authz-db = authz # 指定权限分组配置文件路径,路径使用绝对或者相对路径都可以, 使用默认即可,该文件必须具有可读写权限

#只需修改以上内容,去掉相应的注释,修改值,保存退出

vi passwd
[users]
# harry = harryssecret
# sally = sallyssecret

imooc = 123456 # 这样就添加了一个用户名为imooc, 密码为 123456 的账户, 保存退出
imooc2 = 123456
imooc3 = 123456
imooc4 = 123456
#保存退出

vi authz

[aliases] # 别名配置用的比较少

[groups]
pm = imooc # 指定imooc账户的组为 pm
dev = imooc2, imooc3 # 指定imooc2, imooc3 账户的组为 dev
rookie = imooc4 # 指定imooc4 账户的组为 rookie

[/] # 表示版本库的根目录 为组指定权限需要在组名前加 @ 符号
# r 表示有更新权限 w 表示有 更新和提交权限
@pm = rw # 指定pm 组具对根目录有 rw权限
@dev = r # 指定dev 组具对根目录有 r权限
@rookie = r # 指定rookie 组具对根目录有 r权限

[imooc:/] # 指定名称为imooc的版本库的根目录
@pm = rw
imooc2 = rw
imooc3 = r
imooc4 = # = 后面什么都没有表示imooc4 对这个仓库什么都干不了。

[repos:/xxx]
* = r # 表示所有用户对repos仓库的xxx文件夹都只有更新权限。

#保存退出

运行 svn 服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 svnserve -d -r /svnroot/imooc
``

### 版本库的访问

```sh
cd Desktop/
mkdir svntest
cd svntest
# 下面使用 svn 的客户端命令

# co 是 checkout 的缩写,它们是等价
svn checkout svn://192.168.0.180
#or 和上面作用一样,
svn co svn://192.168.0.180
#or 或者直接跟上用户名密码
svn co svn://192.168.0.180 --username imooc --password 123456
# 一般使用不跟用户参数 密码参数的简单用法,

# 在Mac 和Ubuntu下都会在上述命令第一次执行时先 输入当前Mac或Linux系统的当前用户的密码,然后才会要求输入 svn 的账号密码

# 在centos6 下需要在iptables 下做相关的配置,实验环境就直接关掉iptables
service iptables stop

# 在centos 7 里面使用 firewalld 管理防火墙
systemctl disable firewalld

总结:

  • 1 要在svnserve.conf 做一些设置,参照上面介绍
  • 2 要在passwd 里面建账号设密码
  • 3 要在authz里面对账号授权
  • 4 如果系统防火墙影响外部访问,需要做相关修改