尝试从SVN回购中结账会给我
svn:E195019:检测到URL的重定向周期。。。
但是,似乎只有当我在某个(特定)代理服务器后面时才会出现此错误。
正如在另一篇文章中所讨论的(请参阅乌龟svn给我的"检测到URL的重定向周期"),如果svn DAV配置错误,例如使用SVNParentPath,其中应该使用SVNPath,就会发生此错误。然而,我的配置似乎是正确的,而且据我所知,问题只发生在代理之后。
储存库的设置或多或少是标准的,例如
服务器别名svn.mydomain.com<位置/myrepo>DAV svnsvn路径/var/www/vhosts/mydomain.com/svn/myrepoAuthType BasicAuthName"mydomain svn"AuthUserFile/var/www/vhosts/svn.mydomain.com/conf/htpasswd-myproject#允许任何人以只读方式访问,否则要求#需要身份验证需要有效用户<位置>
在本教程中,我遇到了类似的错误:如何在Ubuntu 18.04&16.04升。后来意识到,我必须删除步骤5中的以下行
Alias/svn/var/lib/svn
(在花了半个周末的时间搜索解决方案后,我给出了自己问题的答案):
此错误消息似乎与subversion存储库位于目录svn/myrepo
有关,其中目录svn
也被列为子域svn.mydomain.com
的DocumentRoot。DocumentRoot指令对我来说并不明显,因为子域的文档根是在另一个conf文件中配置的(我使用Plesk来维护服务器)。这造成了某种歧义。一旦我将子域的文档根移到另一个位置,错误消息就消失了。
这个问题很难找到,因为据我所知,
-
如果repo位于子域的顶层,即上述配置中的
<Location />
和SVNPath /var/www/vhosts/mydomain.com/svn
,则不会出现错误。 -
只有通过代理访问回购时,才会出现错误。
-
与DocumentRoot的冲突并不那么明显,因为它是一个子域。
因此,总结一下:解决方案(使用Plesk时):将Plesk设置(GUI)中子域的"DocumentRoot"更改为与SVN目录不同的内容。www.mydomain.com的"DocumentRoot"是httpdocs
。svn.mydomain.com的"DocumentRoot"(默认情况下)为svn
。我把它改成httpdocs-svn
,问题就解决了。文件夹httpdocs-svn
没有在我的设置中使用,因为svn.mydomain.com下面的所有内容都由DavSVN处理。
确保您使用的链接是"svn",而不是"view"链接
即www.myrepo.com/svn/myproject/trunk||correct
www.myrepo.com/view/myproject/trunk||不正确
这应该行得通。
在我的案例中,问题是ubuntu上的配置文件之间存在不兼容的设置。
我有ubuntu 18.04和Apache2,还有ubuntu的最新服务器,为了解决重定向问题,我不得不从两个不同的配置文件中删除Alias:/etc/Apache2/mods-enabled/dav_svn和etc/Apache2/site-enabled/default-ssl.conf
/etc/apache2/mods enabled/dav_svn
#Alias /svn /svn_repo/svn
<Location /myrepo>
DAV svn
SVNPath /svn_repo/svn
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /mypath/dav_svn.passwd
Require valid-user
AuthzSVNAccessFile /etc/apache2/dav_svn.authz
</Location>
/etc/apache2/site-enabled/default-ssl.conf
#Alias /svn /svn_repo/svn
<Location /myrepo>
DAV svn
SVNPath /svn_repo/svn
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /mypath/dav_svn.passwd
Require valid-user
AuthzSVNAccessFile /etc/apache2/dav_svn.authz
</Location>
显然,修改后我需要重新启动apache:
sudo service apache2 restart
问题出在签出过程中提供的SVN URL上。我检查了这个问题的各种帖子,但没有一个对我有效。下面是对我有效的非常简单的解决方案,
您需要使用链接的csvn存储库http://localhost:3343/csvn/repo/list',并复制要访问的存储库的"签出命令"的URL。
您需要在乌龟SVN客户端中使用此URL进行结账。
我已经解决了同样的问题。遵循以下步骤:
删除
Alias /svn /var/lib/svn` ( `# Alias /svn /var/lib/svn` ) ,
和
sudo service apache2 restart