SVN服务器上的`svn checkout`会导致repo中断301错误

我们有一个nginx服务器代理Apache + SVN的标准设置。 nginx的设置是一个非常简单的代理:

server { server_name svn.ourdomain.tld; location / { proxy_pass http://localhost:8080; } } 

Apache的设置如下:

 <Location /> DAV svn SVNParentPath /var/svn AuthType Basic AuthName "Authentication Required" AuthUserFile /var/svn/.auth Require valid-user </Location> 

…它允许我们使用像http://svn.ourdomain.tld/repo这样的东西来访问存储库。 我们现在已经运行了这个设置了大约2年没有问题。

最近我们发现,我们需要将其中一个存储库检出到服务器本身上,但是每当我们这样做的时候,似乎就会打破回购。 从那一刻起,它只会回应一个301 Moved Permanently错误。

我们已经尝试过:

  • svn co file:///path/to/repo
  • svn co svn://localhost/repo
  • svn co svn://svn.ourdomain.tld/repo
  • svn co svn+ssh://localhost/repo
  • svn co svn+ssh://svn.ourdomain.tld/repo
  • svn co http://localhost/repo
  • svn co http://svn.ourdomain.tld/repo

也尝试绕过nginx,并得到相同的错误:

  • svn co http://localhost:8080/repo
  • svn co http://svn.ourdomain.tld:8080/repo

从另外一台机器上检出,按照预期工作, 直到我们试图检出服务器,然后拒绝301错误。

更令人困惑的是,这个版本库服务器还托pipe着我们的Hudson CI服务器,它可以每小时抽出和build立我们的项目。 这导致我们怀疑这是导致通信错误的svn客户端。

它也非常混乱,删除然后使用svnadmin重新创build回购不会重置错误 – 即使它是“新”回购仍然不可用! 重新启动Apache和颠覆(svnserve)没有影响,或原来的错误。

版本信息:

  • 操作系统:64位CentOS 4.2,2.6.27内核
  • svn客户端:1.4.2(对于服务器和远程客户端都是一样的)
  • svn服务器:1.4.2
  • httpd:2.2.3

更新:

当在repo服务器上运行时, svn export也会发生这种情况。 从任何其他箱子/客户端,都没有问题。 以下是工作stream程,以帮助澄清错误:

  1. [~repo-server~]# svnadmin create {repo}; chown -Rf www:www {repo}
  2. [remote-client]# svn checkout http://svn.ourdomain.tld/repo
  3. [remote-client]# svn add file; svn ci -m ''
  4. [~repo-server~]# cd /var/www; svn export file:///path/to/repo/trunk ourproject
  5. [remote-client]# svn update 失败,301错误

我也可以确认这个盒子的主机名在这里没有效果,这很奇怪:是否将svn.ourdomain.tld添加到/etc/hosts它仍然中断 – 我们认为这可能是一个问题本地主机路由,但似乎并非如此。

我们是否在文档中缺less一些说明当服务器位于同一个盒子时无法检出回购的问题? 当我们在本地结账时,如何阻止回购变得腐败?

svn不处理HTTPredirect(这就是301错误),看看redirect指向(wget,wireshark),从那里结帐。

另外它是apache的具体问题,虚拟主机configuration可以打破它。