拆分 svn 存储库

拆分 svn 存储库

我在 FreeBSD 7.2 上的 Apache 2.2 上运行 Subversion 1.6。

我们的 Apache/SVN 服务器设置为当我们访问http://svn.example.gov/ 我们得到了一个存储库列表。为简洁起见,下面是一个示例配置。实际配置涉及 LDAP,但希望这不会有什么影响。

# All users can access this directory 
<Location />
DAV svn
SVNParentPath /data/svn
# list all repos under /data/svn
SVNListParentPath on

SSLRequireSSL

AuthName "Use your work password"
AUthType Basic
AuthUserFile /etc/apache22/htpasswd

Require User admin customer1 customer2
</Location>

我想将其拆分为三个视图。一个用于“/”(针对管理人员),一个用于“/repo1”(针对客户 1),一个用于“/repo2”(针对客户 2),如下所示。但是,当我尝试这样做时,我收到以下错误:

  • 客户端。此错误是错误的,因为我没有现有的工作副本。我正在尝试签出新的工作副本:

    $ svn co https://svn.example.gov/repo1/
    svn: Repository moved permanently to 'https://svn.example.gov/repo1/'; please relocate
    
  • 服务器端:

    Jul  6 17:47:51 svn httpd[98216]: [error] [client 10.10.10.176] Could not fetch resource information.  [301, #0]
    Jul  6 17:47:51 svn httpd[98216]: [error] [client 10.10.10.176] (2)No such file or directory: Requests for a collection must have a trailing slash on the URI.  [301, #0]
    

这是我的新示例配置:

# All users can access this directory 
<Location />
DAV svn
SVNParentPath /data/svn
# list all repos under /data/svn
SVNListParentPath on

SSLRequireSSL

AuthName "Use your work password"
AUthType Basic
AuthUserFile /etc/apache22/htpasswd

Require User admin
</Location>

# Only customer1 can access this repo
<Location /repo1>
DAV svn
SVNPath /data/svn/repo1

Require User customer1
</Location>

# Only customer2 can access this repo
<Location /repo2>
DAV svn
SVNPath /data/svn/repo2

SSLRequireSSL

Require User customer2
</Location>

答案1

<Location />和部分都<Location /repo1>适用于/repo1URI 路径,因此它们都按顺序处理。请参阅http://httpd.apache.org/docs/2.2/sections.html

所以你重复了一些指令,我敢打赌他们对此并不满意。特别是:

在 Subversion 存储库的配置块中,[SVNPath] 或 SVNParentPath 必须存在,但不能同时存在。

http://svnbook.red-bean.com/en/1.5/svn.ref.mod_dav_svn.conf.html

你们俩都申请了/repo1

我也不确定多个Require指令是如何表现的,快速扫描文档也并不能让我明白,但你可以尝试并找出答案。

我建议首先将管理视图放在类似的地方/admin而不是根目录,以避免<Location />同时应用多个部分而导致复杂化。然后,当它工作正常时,弄清楚如何分解出通用指令以使上述设置正常工作。(也许你已经这样做了,然后你可以跳到第二步。)

相关内容