怪异的Apache2.2 SVN错误,“预期存储库格式‘3’或‘5’;发现格式9”

时间:2022-10-05 21:13:13

I've had a repo that I would access, using TortoiseSVN, from only the same computer on which the Subversion win32 service was running, and it's been working for a while now. I decided to try to set up mod_dav_svn to be able to get at it from elsewhere. When I try to access it, I get this error in the browser:

我使用了一个repo,我可以访问它,使用的是一个由Subversion win32服务运行的同一台计算机,它已经运行了一段时间了。我决定尝试设置mod_dav_svn,以便能够从其他地方得到它。当我试图访问它时,我在浏览器中得到这个错误:

<D:error>
<C:error/>
<m:human-readable errcode="165005">
Could not open the requested SVN filesystem
</m:human-readable>
</D:error>

...and these errors in the log:

…这些在日志中的错误:

 (20014)Internal error: Expected repository format '3' or '5'; found format '9'
 Could not fetch resource information.  [500, #0]
 Could not open the requested SVN filesystem  [500, #165005]
 Could not open the requested SVN filesystem  [500, #165005]

Here's what's in my .conf:

这是我的。conf:

LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

and

DAV svn
SVNPath e:/dev/.svn

I put the /.svn because before I did that, I was getting the same error text on the client (but with code 720002) and the log showed Apache was looking for e:/dev/format, which doesn't exist, but e:/dev/.svn/format does.

我把/。因为在此之前,我在客户机上获得了相同的错误文本(但是使用代码720002),日志显示Apache正在寻找e:/dev/format,这是不存在的,但是e:/dev/。svn /格式。

I read this, and noticing that my subversion was 1.5.1 and 1.5.5 was out, and that I had upgraded TortoiseSVN recently, I thought that maybe there was some incompatibility (this may not make sense, I don't know how it works exactly.) So I downloaded 1.5.5, stopped the service, copied the DLLs and EXEs overtop, restarted the service, copied the new .so files to Apache's modules directory, and restarted httpd. No luck.

我读了这篇文章,注意到我的subversion是1.5.1和1.5.5,而且我最近升级了龟甲,我认为可能有一些不兼容(这可能没有意义,我不知道它是如何工作的)。所以我下载了1.5.5,停止了服务,复制了dll和EXEs overtop,重新启动了服务,复制了新的,所以文件到Apache的模块目录,重新启动httpd。没有运气。

Any suggestions? This particular 'format 9' thing seems to be rare...

有什么建议吗?这种特殊的“格式9”似乎很罕见……

1 个解决方案

#1


6  

please bear with me through the following explantion, it justifies my hypothesis on your problem and will give you some insights as to how SVN works:

请耐心听我的解释,它证明了我对你的问题的假设,并会给你一些关于SVN如何工作的见解:

In subversion you have 2 places containing files: the repository and the working copy.

在subversion中,您有两个包含文件的位置:存储库和工作副本。

The repository stores the history, you checkout from the repository in a working copy work there and commit back to the repository.

存储库存储历史记录,您从存储库中签出工作副本并提交到存储库。

Svnervice and apache svn both allow you to expose a repository Tortoise allows you to create working copies from an exposed repository.

Svnervice和apache svn都允许您公开存储库乌龟,允许您从公开的存储库中创建工作副本。

From what you posted I think you are trying to expose a working copy instead of a repository (the ".svn" folder is typical of a working copy and I bet the e:\dev.svn is a checkout directory).

从您发布的内容来看,我认为您是在尝试公开一个工作副本而不是存储库(“。”svn“文件夹是典型的工作副本,我打赌e:\dev。svn是一个签出目录。

go in the service management and find out the command line which runs the svn service it should contain a string like the following : svnserve -d -r {somepath}

进入服务管理并找到运行svn服务的命令行,它应该包含如下的字符串:svnserve -d -r {somepath}

The {somepath} is the path to your repository. This is the path you should provide in the SVNPath configuration directive of apache.

{somepath}是通往存储库的路径。这是您应该在apache的SVNPath配置指令中提供的路径。

One last thing : do NOT allow R/W access to the same repository using both svnserve and apache svn, it will probably corrupt your repository by exposing it to race conditions on the transaction locks

最后一件事:不要让R/W使用svnserve和apache svn访问同一个存储库,它可能会使您的存储库暴露在事务锁的竞争条件下。

#1


6  

please bear with me through the following explantion, it justifies my hypothesis on your problem and will give you some insights as to how SVN works:

请耐心听我的解释,它证明了我对你的问题的假设,并会给你一些关于SVN如何工作的见解:

In subversion you have 2 places containing files: the repository and the working copy.

在subversion中,您有两个包含文件的位置:存储库和工作副本。

The repository stores the history, you checkout from the repository in a working copy work there and commit back to the repository.

存储库存储历史记录,您从存储库中签出工作副本并提交到存储库。

Svnervice and apache svn both allow you to expose a repository Tortoise allows you to create working copies from an exposed repository.

Svnervice和apache svn都允许您公开存储库乌龟,允许您从公开的存储库中创建工作副本。

From what you posted I think you are trying to expose a working copy instead of a repository (the ".svn" folder is typical of a working copy and I bet the e:\dev.svn is a checkout directory).

从您发布的内容来看,我认为您是在尝试公开一个工作副本而不是存储库(“。”svn“文件夹是典型的工作副本,我打赌e:\dev。svn是一个签出目录。

go in the service management and find out the command line which runs the svn service it should contain a string like the following : svnserve -d -r {somepath}

进入服务管理并找到运行svn服务的命令行,它应该包含如下的字符串:svnserve -d -r {somepath}

The {somepath} is the path to your repository. This is the path you should provide in the SVNPath configuration directive of apache.

{somepath}是通往存储库的路径。这是您应该在apache的SVNPath配置指令中提供的路径。

One last thing : do NOT allow R/W access to the same repository using both svnserve and apache svn, it will probably corrupt your repository by exposing it to race conditions on the transaction locks

最后一件事:不要让R/W使用svnserve和apache svn访问同一个存储库,它可能会使您的存储库暴露在事务锁的竞争条件下。