使用 Subversion 服务器配置 SVN 访问

使用 Subversion 服务器配置 SVN 访问

背景简介。我们在没有网络访问权限的 Windows 机器上运行 Subversion Server 1.6.5(没有 Apache,只有 SVN 服务器)。我们只使用 TortoiseSVN 和 AnkhSVN,对于持续集成,我们使用 svn 客户端命令行。

好的,我在网上查了一下,也读了一些 SVN 书,但我不明白为什么这个用户设置不起作用。

authz(SVN授权文件)内容:

    ### Sanitized version
    [groups]
    devUsers = user1
    qaUsers = user2

    [/]
    @devUsers = r
    @qaUsers = r

    [/Dev/SourceCode]
    @devUsers = rw
    ~devUsers = 

    ### QA Projects
    [/Dev/testCases]
    @qaUsers = rw
    ~qaUsers =

据我所知,您必须授予所有用户至少对存储库根目录的读取权限。好的,很好。这可行。接下来,我的 /Dev/SourceCode 目录应该只能由 @devUsers 访问,但由于某种原因,在 TortoiseSVN 的存储库浏览器中@qaUsers可以看到此文件夹。我猜全局读取访问权限/会覆盖~devUsers =authz 文件中的行?对于 /Dev/TestCases 文件夹也是如此,它应该只能由访问@qaUsers,但@devUsers也可以查看此文件夹。这是我的问题之一。

但主要问题是 /Dev/SourceCode 的子文件夹是只读的。我知道这一点,因为当我尝试将某些内容签入子文件夹时,它显示授权失败。但是,在根文件夹中,如果您签入文件,它就可以正常工作。

我猜这是/只读访问再次覆盖了一切。这是否意味着必须为每个子文件夹赋予明确的 rw 权限?有没有办法从现在开始使用当前父文件夹的权限?即 /Dev/SourceCode 的权限。如果您想在有许多子文件夹的情况下授予所有子文件夹 rw 权限,这似乎真的很不方便。

答案1

当我看到您的授权文件时,我的第一个想法是,“路径声明中是否缺少存储库名称?”

我的意思是,

[/Dev/SourceCode]
@devUsers = rw
@qaUsers = 

看起来应该是

[<repo-name>:/Dev/SourceCode]
@devUsers = rw
@qaUsers = 

或者,如果“Dev”存储库的名称,

[Dev:/SourceCode]
@devUsers = rw
@qaUsers = 

我使用 apache 作为我们的存储库,但无论是 httpd 还是 svnserve,语法看起来都相同:基于路径的授权

我希望这有帮助。

谢谢你,
扎卡里

答案2

权限的级联应该可以按预期工作;不需要每个目录都具有权限。您只需指定更具体的路径来覆盖父级的权限,就像您正在做的那样。

我不熟悉~groupname语法。您显然想让它表示否定(不在组中的用户),但我不确定它是否受支持。尝试类似这样的操作(您的前两个部分用于组定义和 root 访问权限相同):

[/Dev/SourceCode]
@devUsers = rw
@qaUsers = 

[/Dev/testCases]
@qaUsers = rw
@devUsers =

这应该可行,尽管拒绝开发人员访问测试用例让我很难过。

编辑:既然您已经尝试过,但不起作用...也许可以尝试反转顺序?匹配应该从最具体到最不具体进行,因此顺序无关紧要,但我至少会尝试将它们放在文件中比 [/] 权限更早的位置。如果这有区别,那么我怀疑您的服务器版本中存在错误。

答案3

与我的其他答案完全不同的想法:

...你确定你的[/Dev/testCases]定义中没有拼写错误(例如大小写)?(你使用的是Windows:我知道如果某些内容实际上被命名为“DEV”,Windows会将其显示为“Dev”,例如...但SVN可能会在意)

...另外,你确定它不应该是[/trunk/Dev/testCases]或者别的什么吗?

相关内容