操作系统:ubuntu18.04.4 LTS
一、安装步骤
1、安装subversion
root@tencentCloud:~# apt update
root@tencentCloud:~# apt install subversion
输入svnserve --version
查看是否安装成功:
root@tencentCloud:~# svnserve --version
svnserve, version 1.9.7 (r1800392)
compiled Mar 28 2018, 08:49:13 on x86_64-pc-linux-gnu
Copyright (C) 2017 The Apache Software Foundation.
This software consists of contributions made by many people;
see the NOTICE file for more information.
Subversion is open source software, see http://subversion.apache.org/
The following repository back-end (FS) modules are available:
* fs_fs : Module for working with a plain file (FSFS) repository.
* fs_x : Module for working with an experimental (FSX) repository.
* fs_base : Module for working with a Berkeley DB repository.
Cyrus SASL authentication is available.
2、创建仓库目录
root@tencentCloud:~# mkdir /home/svn
root@tencentCloud:~# mkdir /home/svn/test
创建/home/svn目录作为存储所有项目的位置,创建/home/svn/test作为test项目的仓库目录。
3、创建项目
root@tencentCloud:~# svnadmin create /home/svn/test
创建test项目,然后查看是否创建成功:
root@tencentCloud:~# ls /home/svn/test
conf db format hooks locks README.txt
二、修改配置
进入/home/svn/test/conf/会看到3个配置文件:svnserve.conf, passwd, authz 。
svnserve.conf是配置svn的设置,passwd是配置用户和密码,authz是配置用户的访问权限。
1、svnserve.conf
[general]
anon-access = none #使非授权用户无法访问
auth-access = write #使授权用户有写权限
password-db = passwd #用户密码文件,当前是统计目录下的passwd文件,可以换成其他路径
authz-db = authz #访问控制文件,当前是同级目录下的authz文件,可以换成其他路径
realm = My First Repository #认证命名空间,随便写
2、passwd
[users]
test1 = 123
test2 = 456
test3 = abc
test4 = def
3、authz
#设置用户组
[groups]
group1 = test1,test2
group2 = test3,test4
#设置权限
[/]
#用户组group1对项目都没有权限
@group1 =
#用户组group2对项目有读写权限
@group2 = rw
三、启动服务
root@tencentCloud:~# svnserve -d -r /home/svn/test
注意:默认端口是3690,要开放防火墙端口。
测试拉取:
root@tencentCloud:~# svn checkout svn://127.0.0.1/ --username test1 --password 123
svn: E170001: Authorization failed
root@tencentCloud:~# svn checkout svn://127.0.0.1/ --username test3 --password abc
Checked out revision 0.
可以看到group1的test1鉴权失败,group2的test3拉取成功。
四、优化
1、配置多项目
上面的配置和启动方式只能开启一个项目的svn,如果要配置多个项目,就要修改svnserve.conf和authz,并更改启动方式。
- 先复制出passwd和authz文件到/home/svn/conf目录下:
root@tencentCloud:~# cp /home/svn/test/conf/passwd /home/svn/conf
root@tencentCloud:~# cp /home/svn/test/conf/authz /home/svn/conf
root@tencentCloud:~# ls /home/svn/conf
authz passwd
- 修改svnserve.conf配置中password-db和authz-db的地址:
password-db = /home/svn/conf/passwd
authz-db = /home/svn/conf/authz
- 根据情况修改authz
#设置用户组
[groups]
group1 = test1,test2
group2 = test3,test4
#所有项目
[/]
#用户组group1对所有项目都有读权限
@group1 = r
#test项目
[test:/]
#所有用户都没有test项目的权限
* =
#用户组group2有test项目的读写权限
@group2 = rw
#用户test4对test项目没有权限
test4 =
4.更改启动方式
root@huaweiCloud:~# svnserve -d -r /home/svn
验证:
root@tencentCloud:~# svn checkout svn://127.0.0.1/ --username test3 --password abc
Checked out revision 0.
2、配置系统服务
在shell中用svnserve启动的方式每次开机都要操作一次,有点繁琐,可以把它注册成一个系统服务,这样就能用systemctl设置开机自启。
在/etc/systemd/system/目录下新建svnserve-daemon.service文件,并写入以下内容:
[Unit]
Description=svn server daemon
[Service]
Type=forking
ExecStart=/bin/sh -c "svnserve -d -r /home/svn"
ExecStop=/bin/sh -c "killall svnserve"
Restart=on-failure
[Install]
WantedBy=multi-user.target
然后输入以下命令开启服务并设置自启动:
root@tencentCloud:~# systemctl start svnserve-daemon.service
root@tencentCloud:~# systemctl enable svnserve-daemon.service
配置完毕!
5、实践补充
1、客户端TortoiseSVN
linux下可以用svn命令来checkout,那么在windows下我们可以TortoiseSVN客户端来拉取svn项目,下载地址为TortoiseSVN,里面有TortoiseSVN的安装包以及汉化包。
2、svn log
之前自己摸索着配置的时候,把/home/svn/test/conf/svnserve.conf中的anon-access配置成了read,即 anon-access = read
,然后发现这种配置在输入 svn log
的时候查看不了日志。
查找解决方法时发现应该设置成none,即 anon-access = none
。
暂时还不知道是什么原理?