安装

1
sudo apt install subversion

创建仓库

1
sudo svnadmin create ~/svn/project

配置

svn 的配置在仓库根目录下的 conf 文件夹中

1
2
3
4
shtotal 12K
-rw-rw-r--. 1 cent cent 1.1K Oct 30 07:55 authz
-rw-rw-r--. 1 cent cent  309 Oct 30 07:55 passwd
-rw-rw-r--. 1 cent cent 3.1K Oct 30 07:55 svnserve.conf

passwd

passwd 是配置用户名和密码的文件

增加用户在 [users] 下添加账号和密码,格式为 账号=密码

1
2
3
4
5
[users]
# harry = harryssecret
# sally = sallyssecret
test1 = test1 #增加一个账号为 test1 密码为 test1 的用户
test2 = test2

authz

authz 是配置用户组及对应版本库的权限

[groups] 配置用户组以及组员,组员之间用 , 隔开

版本库通过 [] 表示, [/] 表示版本库的根目录, [repository:/] 表示名为 repository 的版本库, [repository:/public] 表示名为 repository 版本库下的 public 目录。

用户组以 @ 开头, @dev 表示 dev 用户组,不以 @ 开头表示用户。后面接对应的权限, r 表示可读, w 表示可写,不填表示没有权限。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
dev = test1,test2 # 增加一个 dev 的用户组,组员有 test1 和 test2

# [/foo/bar]
# harry = rw
# &joe = r
# * =

# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r

[/] # 版本库的根目录
@dev = rw # 用户组的权限

[test:/] # 名为 test 的版本库
test1 = rw  # 账号为 test1 对 test 版本库的权限

[test:/public] # 名为 test 版本库下 public 目录的权限
test2 = r # test2 对 版本库 test 下 public 目录的权限

svnserve.conf

svnserve.conf 是用来设置用户密码配置文件所在的路径,和用户权限配置文件所在的路径,主要有以下 4 个配置

  1. anon-access 用来设置没有认证的用户所具有的权限,有三个取值 none 表示没有权限, write 表示可以往服务器提交数据, read 表示可以从服务器更新数据,但是不能提交。
  2. auth-access 用来设置验证用户所具有的权限,和 anon-access 一样有三个表示权限的值,这里不再赘述。
  3. password-db 用来指定用户名和密码所在的路径
  4. authz-db 用来指定权限所在的路径
1
2
3
4
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz

删除仓库

1
rm -rf ~/svn/project

启动服务

1
svnserve -d -r ~/svn/project

svn 默认端口号是 3690,可以通过 --listen-port xxx 来指定特定的端口

-d 表示后台运行

-r 后面跟 svn 仓库的路径

多版本库管理

在 svn 的管理中,可能会存在多个版本库的情况,这样就需要管理多个版本库。

一般的做法是创建好了不同的版本库,分别启动一个 svnserve 去管理。这样做简单,但是第二个库开始就需要指定端口,默认的端口(3690)已经被第一个占用了。而且项目之间存放的路径可能不同,比较分散,这样管理起来就比较麻烦。

1
2
3
4
sudo svnadmin create ~/project1
sudo svnadmin create ~/project2
svnserve -d -r ~/project1
svnserve -d -r ~/project2 --listen-port 3691

除了上面的做法,还有一种做法是把所有的仓库存放在同一个目录下,统一管理。这样就可以通过一个端口来管理所有的版本库了,不过需要注意的是这些仓库需要放在同一个目录下。

1
2
3
sudo svnadmin create ~/svn/project1
sudo svnadmin create ~/svn/project2
svnserve -d -r ~/svn/

版本库的备份

随着开发不断进行,版本库的版本号一直在增加,内容也在不断增多,占用的空间也越来越大,这时候我们可以通过备份来丢弃掉前面的一些版本,以此达到精简版本的目的。

备份的指令是 svnadmin dump 仓库的路径 -r 开始版本号:结束版本号 > 保存的地址

举个🌰

1
svnadmin dump ~/svn/project -r 3:10 > ~/dump

版本库的导入

版本库备份之后,我们还要把它导入到一个新的仓库中使用。

导入的指令是 svnadmin load 仓库的地址 < 精简之后的地址

同样举个🌰

1
svnadmin load ~/svn/project < ~/dump