0

我将我的 svn 存储库配置为通过 apache 访问它。

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

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

但是,当我尝试在 Windows 上使用 tortoiseSVN 或在 linux 上使用命令行进行结帐时,第一个返回:“无法使用的 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>
4

2 回答 2

0

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

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

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

在 Apache 中,域之后通常是服务器实例,因为多个服务器实例可以连接到单个 Apache 实例。大多数时候,它只是svn ,尽管我见过使用源代码。这是在您的 Apache HTTP 配置中配置的。

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

可以同时通过 svnserve 和 Apache http 为同一个存储库提供服务。如果这样做,您可以使用 Apachehttp协议或svn协议。

如果这不能解决您的问题,您必须向我们提供更多信息。例如,您的 Apache http 配置是什么样的。您可以浏览哪个 URL,但不能结帐?请记住,在 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

我相信你的问题是目录指令本身。假设指定您的存储库所在的域下的目录。通常,它只是类似svnor的东西source,所以你会这样做来结帐:$ svn co http://svn.domain.com/svn/repoor $ svn co http://svn.domain.com/source/repo。查看URL 中您的域名后面的位置吗?

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

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

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

于 2012-09-10T17:31:42.220 回答
0

您无法检查域名,也无法更改协议并期望另一端的服务器突然开始使用该新协议。

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

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

于 2012-09-10T15:47:49.163 回答