环境
[root@slave1 ~]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
[root@slave1 ~]# svn --version
svn,版本 1.7.14 (r1542130)
[root@slave1 ~]# ip addr
net 192.168.0.201/24 brd 192.168.0.255 scope global noprefixroute ens33
一、安装svn
[root@slave1 ~]# yum -y install subversion
[root@slave1 ~]# rpm -ql subversion
/etc/subversion
/etc/sysconfig/svnserve
/run/svnserve
/usr/bin/svn
/usr/bin/svnadmin
/usr/bin/svndumpfilter
/usr/bin/svnlook
/usr/bin/svnrdump
/usr/bin/svnserve
/usr/bin/svnsync
/usr/bin/svnversion
……
二、自定义数据路径
SVN默认的数据路径在“/var/svn”目录下,在配置文件/etc/sysconfig/svnserve
中声明。这里自定义到“/home/subversion”,因为/home目录挂载了一块存储容量较大的硬盘:
[root@gitlab ~]# cat /etc/sysconfig/svnserve
OPTIONS="-r /home/subversion"
三、启动SVN服务端
启动时加-d选项放在后台运行。SVN服务端启动后,默认监听3690端口,也可以通过--listen-port
指定端口:
[root@slave1 ~]# svnserve -d -r /home/subversion
[root@slave1 ~]# ps -ef | grep svn
root 882 1 0 16:55 ? 00:00:00 svnserve -d
[root@slave1 ~]# netstat -tlnp | grep svn
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 882/svnserve
四、创建版本库
在第二步中定义了版本库的路径为/home/subversion。
[root@slave1 ~]# mkdir -p /home/subversion
[root@slave1 ~]# svnadmin create /home/subversion/
[root@slave1 ~]# ls /home/subversion/
conf db format hooks locks README.txt
五、创建用户并授权
新建一个管理员用户和一个普通权限用户user1:
[root@slave1 ~]# cat /home/subversion/conf/passwd
[users]
admin = 123123 #设置用户名密码,格式“用户名 = 密码”
user1 = 123123
user2 = 123123
user3 = 123123
为用户授权:
[root@slave1 ~]# cat /home/subversion/conf/authz
[groups] #首先为用户分组
admingroup = admin #用户admin归属于admingroup组
uigroup = user1,user2 #user1和user2归属于uigroup组
[/] #为根目录授权
@admingroup = rw #admingroup组对根目录拥有读写权限
*= #其他用户对根目录没有访问权限
[/ui]
@admingroup = rw #admingroup组对/ui目录有读写权限
@uigroup = rw #uigroup组对/ui目录拥有读写权限
user3 = r #单独为user3用开放读权限
*= #其他用户没有访问权限
最后编辑svnserve配置:
[root@slave1 ~]# cat /home/subversion/conf/svnserve.conf | grep -v '^$' | grep -v '^#'
[general]
anon-access = read #匿名用户可读
auth-access = write #认证用户可读写
password-db = passwd #使用passwd文件作为password database
authz-db = authz #使用authz文件作为认证规则数据库
realm = test #uuid
六、管理员创建/ui目录
经过以上步骤,只创建了版本库的根目录,/ui目录尚未创建。作为管理员为ui部门创建文件目录:
[root@slave1 ~]# mkdir /root/svn
[root@slave1 ~]# cd /root/svn/
[root@slave1 svn]# svn co svn://192.168.0.201/
认证领域: <svn://192.168.0.201:3690> test #这里显示出了在svnserve.conf文件中定义的“realm”用户名: admin
“admin”的密码:
……
保存未加密的密码(yes/no)?yes
取出版本 0。 #因为当前版本库中没有内容,当前版本为0
[root@slave1 svn]# ls
[root@slave1 svn]# mkdir ui #创建ui目录
[root@slave1 svn]# svn add ui #将ui目录增加到“缓冲区”
A ui
[root@slave1 svn]# svn ci -m 'add ui' #提交。-m选项说明了本次提交的信息
正在增加 ui
提交后的版本为 1。
[root@slave1 svn]# mkdir ops #再增加一个ops目录
[root@slave1 svn]# svn add ops
A ops
[root@slave1 svn]# svn ci -m 'add ops'
正在增加 ops
提交后的版本为 2。
[root@slave1 svn]# touch ui/1.txt #ui目录下创建一个测试文件
[root@slave1 svn]# echo 'Hello' > ui/1.txt
[root@slave1 svn]# svn add ui/1.txt
A ui/1.txt
[root@slave1 svn]# svn ci -m 'add ui/1.txt'
正在增加 ui/1.txt
传输文件数据.
提交后的版本为 3。
七、在Windows上进行测试
在Windows上安装TortoiseSVN。下载页面:https://tortoisesvn.net/downloads.html
新建一个空白文件夹,在右键菜单中选择“SVN Checkout”,在弹出的界面中,填写svn地址,如下图:
点击“ok”,弹出认证窗口,输入用户名和密码,如下图:
点击“ok”,文件就下载下来了,如下图:
用user3提交一个文件,因为user3对/ui目录只有读权限,当他执行commit时,出现认证失败的错误。
八、我提交到SVN服务器的文件去了哪里
SVN服务器多是以FSFS格式保存数据。每次commit时,会有对应的版本号,提交的数据被压缩保存到以版本号命名的文件。
[root@slave1 ~]# cat /home/subversion/db/fs-type
fsfs
[root@slave1 ~]# ls -l /home/subversion/db/revs/0/
总用量 16
-r--r--r-- 1 root root 115 7月 2 17:01 0
-r--r--r-- 1 root root 272 7月 2 17:37 1
-r--r--r-- 1 root root 303 7月 2 17:39 2
-r--r--r-- 1 root root 624 7月 2 17:42 3
[root@slave1 ~]# cat /home/subversion/db/revs/0/3