提问的智慧SVN版 - 提问者必读
返回列表 回复 发帖

[原创] 基于svnserve的服务器,权限文件authz配置的常见问题及解答

最近在我用Subversion论坛(http://www.iUseSVN.com/bbs)经常有人提到这样的问题:
为什么我的客户端没有写权限?
为什么我的权限没有起作用?

总结他们的配置,发现
都是用svnserve作为服务器,
都在svnserve.conf中使用了authz-db选项

原因可能如下:

1,配置authz时,没有注意svnserve启动参数-r所指定的目录。
这里有两种情况:
A:-r直接指定到版本库(称之为单库svnserve方式)
比如,有一个库project1,位于D:\svn\project1
使用以下命令启动svnserve
  1. svnserve -d -r D:\svn\project1
复制代码
在这种情况下,一个svnserve只能为一个版本库工作
authz文件如果配置成下面这样就是错的,
  1. [groups]
  2. admin=user1
  3. dev=user2
  4. [project1:/]
  5. @admin=rw
  6. @doc=r
复制代码
应该配置成
  1. [groups]
  2. admin=user1
  3. dev=user2
  4. [/]
  5. @admin=rw
  6. @doc=r
复制代码
因为[project1:/]表示库project1的根目录,而按上面的启动参数,是没有库的概念的。
使用类似这样的URL:svn://192.168.0.1/ 即可访问project1

B:-r指定到版本库的上级目录(称之为多库svnserve方式)
同样,有一个库project1,位于D:\svn\project1
如果使用以下命令启动svnserve
  1. svnserve -d -r D:\svn
复制代码
这种情况,一个svnserve可以为多个版本库工作,
这时如果想限制指定库的指定目录,就应该指定具体的库,像这样
  1. [groups]
  2. admin=user1
  3. dev=user2
  4. [project1:/]
  5. @admin=rw
  6. @doc=r
复制代码
如果此时你还用[/],则表示所有库的根目录,同理,[/src]表示所有库的根目录下的src目录
使用类似这样的URL:svn://192.168.0.1/project1 即可访问project1
这样的URL:svn://192.168.0.1/project2 即可访问project2

2,对中文目录进行权限控制时,没有将权限文件authz改为utf-8格式。

svn对于非英文文件名和目录名使用utf-8格式编码处理,要对中文目录进行正确控制,
应该使用无BOM的utf-8格式,如何将默认的文件转为utf-8,
我使用的是UltraEdit的菜单"ASCII to UTF-8 (Unicode Editing)"。在UltraEdit的配置中,可以设置有无BOM

更多参考文档:
(配置权限控制文件)http://bbs.iusesvn.com/thread-6-1-1.html
(中文目录权限控制)http://bbs.iusesvn.com/thread-41-1-1.html

(Apache的单库多库问题)http://bbs.iusesvn.com/thread-158-1-1.html
1

评分次数

  • 三少

svnservice能实现对多个档案库的管理吗

也就是说,我要建多个档案库来管理不同项目,项目间彼此不关联,所以,对单个项目而言,任何改动产生的版本号是连续的。

回复 #2 lulu 的帖子

可以啊,参数中使用多库svnserve方式就行了

我的根目录的权限管用了,但子目录还不行

我按楼主说的,做了如下操作:
  svnservice -install -d -r e:\svnhome

然后配置authz如下:
  [/]
  Admin = rw
  * = r
  [/Trunk]
  chenjie = rw
  * = r

结果是,根目录的权限管用了,但子目录还不行.
即:我可以用Admin在svnhome下任意目录执行读写操作.可以用chenjie在svnhome下任意目录执行读操作.
但是用chenjie在Trunk目录中无法执行写操作

求助!谢谢!

回复 #4 cjnn 的帖子

请注意单库多库的区别,
svnhome目录下有哪些内容?
svnhome目录下,有:
  Branches
  Tags
  Trunk

我觉得我设的应该是单库吧,把svnhome做为一个库
我是指e:\svnhome下有哪些内容
E:\svnhome下的内容:
        \conf
        \dav
        \db
        \hooks
        \locks
        format
        README.txt

回复 #8 cjnn 的帖子

确保你的svn版本为1.3.2

回复 #9 PCplayer 的帖子

我是装的这些:
svn-1.3.2-setup.exe
TortoiseSVN-1.3.5.6804-svn-1.3.2.msi
LanguagePack-1.3.5.6804-win32-zh_CN.exe
如果是这样,不应该有问题的。
再检查一下你的启动参数是不是确实为单库的,
你试着用多库方式配置看看如何,
另外注意如果有中文,应该将authz改为utf-8格式(这方面请搜索论坛文章)

回复 #11 PCplayer 的帖子

好吧,我再试试
谢谢你!
svn下有p1  p2   p3 三个仓库,svn是根
AuthzSVNAccessFile 怎么指向?

<Location /svn>
   DAV svn
#   SVNPath /home/server/servers/svn
   SVNParentPath /home/server/servers/svn   ==>多库
   AuthzSVNAccessFile /home/server/servers/svn/p1/conf/authz   ==?????

   Satisfy Any
   Require valid-user
   AuthType Basic
   AuthName "身份验证"
   AuthUserFile "/home/server/servers/svnuser.passwd"
</Location>

回复 #13 zpqs 的帖子

Apache的授权文件跟svnserve的是两回事
如果使用apache,跟svnserve方式中的svnserve.conf,passwd,authz都没关系,
你自己完全可以另外指定:通过SVNParentPath 和 AuthzSVNAccessFile

请参考论坛文章
ok thank u.
挺好的:)))
多库时的image这么来做?举例:BTNSfirm是库AEC的上级目录,image时用svnserve -d -r c:\BTNSfirm\AEC,还是svnserve -d -r c:\BTNSfirm?导入的URL是什么svn://localhost/BTNSfirm还是svn://localhost/BTNSfirm/AEC

回复 #17 leino11121 的帖子

多库的话,这样
svnserve -d -r  c:\BTNSfirm
svn://localhost/AEC

  • 提问前先用多种搜索方式、多种可能的关键字对论坛进行搜索
  • 提问时详细描述软件版本,自己要做什么,做了什么,遇到了什么
  • 最后的绝招:PM版主
  • 问题解决后,请自行将“求助”修改为“已解决”
我看过了,如果是单库的话,就svnserve -d- r 这个库的路径,如果是多库的话,就svnserve -d -r 所有库的根目录

[ 本帖最后由 PCplayer 于 2007-5-22 17:10 编辑 ]

不错,用了!!!!
返回列表
订阅 我用Subversion - SVN中文论坛 邮件列表:iUseSVN@googlegroups.com
电子邮件:
网站重要事项将会在这个列表进行通知,点击这里浏览存于列表中的所有邮件