环境
CentOS: 8, Subversion: 1.10.2
问题
首先通过svnadmin create myproject命令创建仓库,然后在配置好passwd(用户名、密码),authz,svnserve.conf后,通过SVN客服端访问,发现老是报认证失败(但用户名和密码是对的,如果用户名和密码不对,在SVN客户端则会反复的弹出登录对话框)。配置如下:
[root@srv1]# ls branches conf db format hooks locks README.txt tags trunk |
[groups]
[/trunk] [/branches] |
在项目路径还创建了trunk, branches, tags目录,准备做主干、分支,但通过http://[ip]/myproject/trunk访问,总是认证失败。
解决
经过多次的重试,发现了几个问题:
1、在项目路径建立的trunk,branches,tags目录无效,SVN已不是使用直接的目录映射关系,也就是说项目路径和磁盘物理文件路径并不存在直接的对应关系。实际上,SVN 的提交数据存储在/[仓库路径]/db/revs目录下。
2、在还未引入前,authz中的[/trunk] 和[/branches]授权配置是无效的,因为/trunk和/branches这时还没有(自建目录无效),只有[/]授权配置才是有效的,可让SVN客户端可以访问根目录。
下面是正确的配置:
[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
develop = user1,user2,user3
release = user4,user5
[/]
@develop = r
@release = r
[/trunk]
@develop = rw
#*=
[/branches]
@develop = r
@release = rw
附:
此外,还发现一个如何避免/trunk目录被删的配置方式:
[/]只读,那么引入的/trunk(注意不是在SVN服务器上创建文件夹,如前所述)一级目录则不可删除。
先给用户赋予写的权限,写入后,然后再把所有用户的写权限去掉,也就是写入前:
[/] @develop = r @release = rw |
写入后:
[/] @develop = r @release = r |
修改后要通过命令:svnserve -d -r /home/svn/datadir 命令启动。
这里,/home/svn/datadir为所建的SVN仓库路径。