无法使用tortoise svn连接到svn,但可以通过Web浏览器连接

时间:2012-09-10 15:43:26

标签: apache svn mod-rewrite mod-dav-svn

我配置了我的svn存储库以通过apache访问它。

我可以通过任何带有这些地址的网络浏览器访问它。

http://svn.domain.com
http://www.domain.com:3690

但是当我尝试在Windows上使用tortoiseSVN或在linux上的命令行上检查时,第一个返回:“Unusable URI:它不引用此存储库”,第二个运行数小时并以超时错误。 (我也尝试过svn://domain.com做同样的事情)

我读到mod_rewrite可以用于该问题中的某些内容,但除了删除mod_rewrite之外,我没有看到任何解决该问题的方法。

但我需要mod_rewirte用于此服务器上的网站。

有什么问题?

有没有办法同时运行mod_dav_svn和mod_rewrite?

修改

虚拟主机conf文件如下所示:

<Directory /path/to/subdomain>
  DAV svn
  SVNPath /path/to/repos
  AuthType Basic
  AuthName "Repos Name"
  AuthUserFile /path/to/auth-user/file
  Require valid-user
</Directory>

我将其添加到httpd.conf文件中:

Listen 3690
NameVirtualHost *:3690

<VirtualHost *:3690>
  ServerName svn.domain.com
  <Location />
    DAV svn
    AuthType Basic
    AuthName "Repos Name"
    AuthUserFile /path/to/auth-user/file
    SVNPath /path/to/repos
    Require valid-user
  </Location>
</VirtualHost>

2 个答案:

答案 0 :(得分:0)

您无法检出域名,也无法更改协议,并希望另一端的服务器突然开始讨论该新协议。

您的网站正在向SVN服务器发出SVN请求,然后将请求格式化为HTML格式。这意味着http://svn.domain.com不是SVN URL。你需要找出什么是SVN URL,它将包含至少一个项目名称,如protocol://server/projectname

mod_rewrite是一个很好的工具,可以自动将一个URL重写为另一个URL;但是,如果此时使用mod_rewrite,则只会在以编程方式重写网址的图层下隐藏mod_dav_svn配置问题。以这种方式修复它要困难得多,因为你引入了一个新问题(URL重写是否被破坏?)而没有修复第一个问题。

答案 1 :(得分:0)

好的,为什么你在使用端口3690进行HTTP?

Subversion可以使用几种不同的协议来访问存储库。但是,你不能混合匹配。如果您使用Apache HTTP作为服务器,则只能使用HTTP协议:

$ svn co http://svn.domain.com/<srvrInst>/path/to/your/repository

在Apache中,在域之后,通常是服务器实例,因为多个服务器实例可以连接到单个Apache实例。大多数时候,它只是 svn ,尽管我已经看过 source 。这是在Apache HTTP配置中配置的。

基本上,您可以在Web浏览器中浏览的任何目录都应该允许您查看它。但是,如果您有SVNListParentPath,则会有例外。您的所有存储库的父目录都无法签出。否则,您可以签出任何可以浏览的目录。

可以同时通过svnserve和Apache http提供相同的存储库。如果这样做,您可以使用Apache http协议或svn协议。

如果这不能解决您的问题,您必须向我们提供更多信息。例如,您的Apache http配置是什么样的。您可以浏览哪个网址,但不能结帐?记住在Subversion下,你只能检查目录而不是文件。如果需要文件,可以对文件使用svn cat并将输出重定向到文件。


  

虚拟主机conf文件如下所示:

<Directory /path/to/subdomain>
  DAV svn
  SVNPath /path/to/repos
  AuthType Basic
  AuthName "Repos Name"
  AuthUserFile /path/to/auth-user/file
  Require valid-user

我相信您的问题是目录指令本身。这是假设您的域所在的目录下指定您的存储库所在的目录。通常,它只是svnsource,因此您可以执行此操作以结帐:$ svn co http://svn.domain.com/svn/repo$ svn co http://svn.domain.com/source/repo。在网址

中查看 您的域名后的位置?

我从未尝试过像这样的多级目录。您是否希望人们指定http://svn.domain.com/path/to/subdomain/repo来结帐?结帐网址已经很久了,所以我无法想象添加更多目录。

您说您可以通过网络浏览器浏览存储库。如果是这种情况,您应该能够从Web浏览器中删除该URL(只要它是一个目录而不是文件)并将其粘贴到Tortoise或Subversion命令行中。

顺便说一下,我看到你设置了AuthUserFile。也许问题是您需要指定用户名和密码?暂时不要在端口3690上侦听虚拟主机。如果您确实想使用该端口,请在存储库服务器上运行svnserve,并让人们使用snv://协议。