我正在编写一组svn挂钩,以允许对svn存储库进行远程管理,就像gitolite对GIT所做的那样。
我创建了为我拥有的每个存储库生成AuthzSVNAccessFile的脚本,现在我需要告诉Apache根据存储库查找它们中的每一个。
我不能为每个存储库都有一个apache配置文件,因为它需要重新启动apache服务器。
我知道我可以使用一个AuthzSVNAccessFile来管理多个存储库,但构建文件的脚本需要时间(需要发现存储库中每个目录的完整路径),并且会使提交花费太长时间。
我试着使用mod_rewrite,但它不起作用,也许我用错了。
基本上,我需要在我的apache配置文件中有一个规则,根据请求的URL读取不同的文件,这可能吗?怎样
或者我需要一个能够重写文件块的脚本。我使用sed
来替换模板中的字符串,但不知道如何使用它来替换多行。
感谢您抽出时间
不知道你为什么要使用mod_rewrite,除非我完全误解了你的问题。但是,听起来您正在使用SVNParentPath,并且在弄清楚如何为所有存储库配置authz设置时遇到了问题。
你有几个选择。
使用一个authz文件
实际上,您可以生成一个authz文件,并指定规则应用于哪些存储库。语法的形式为[repos-name:path]
(如您在Subversion Book的基于路径的授权部分中所见)。这样做的一个缺点是,如果你有很多存储库和很多有规则的路径,它可能会减慢速度。这听起来像是你遇到过的。可以帮助缓解这种情况的一件事是使用以下配置
SVNPathAuthz short_circuit
SVNPathAuthz控制当需要访问除请求的URI之外的其他路径(例如,日志、提交等)时,如何授权对除URI之外的路径的请求。默认行为是发出子请求。这将在httpd中生成一个新的GET请求,并通过httpd的所有授权基础结构发送该请求。然而,在几乎所有情况下,这是不需要的,因为唯一可以随着用于服务SVN的位置下的路径而变化的授权配置是mod_authz_SVN配置。短路,告诉Subversion避免所有这些,并简单地将授权信息直接发送给mod_authz_svn,后者直接提供限制延迟的答案。
这可能还不够,所以有几个替代方案,但你至少需要1.7才能使用它们。
AuthzSVNReposRelativeAccessFile
Subversion 1.7添加了一个新的配置指令,允许您指定相对于存储库的conf子目录的路径。例如,如果您有一个名为foo的repo,您可以将authz文件放在/path/to/foo/conf/authz中,然后设置以下配置值:
AuthzSVNReposRelativeAccessFile authz
AuthzSVNAccessFile使用的1.7之前的指令是相对于服务器根路径的。
存储库内Authz*
Subversion 1.8允许您将authz文件存储在存储库中。因此,例如,如果您将repo中名为conf的目录中的文件提交为authz文件,那么您将执行以下操作:
AuthzSVNAccessFile ^/authz
^/语法将替换为存储库的完整路径。
如果您决定使用此软件,您可能需要阅读链接的1.8发行说明中的详细信息。