奇怪的 Apache2.2 SVN 错误,“预期存储库格式‘3’” 或“5”; 找到格式“9”
我有一个可以使用 TortoiseSVN 从运行 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>
...日志中出现这些错误:
(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]
这是我的 .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
并且
DAV svn
SVNPath e:/dev/.svn
我放置了 /.svn 因为在执行此操作之前,我得到了相同的结果客户端上出现错误文本(但代码为 720002),并且日志显示 Apache 正在寻找 e:/dev/format,该格式不存在,但 e:/dev/.svn/format 存在。
我读了这个,并注意到我的颠覆是1.5.1和1.5.5已经出来了,我最近升级了TortoiseSVN,我想可能有一些不兼容(这可能没有意义,我不知道它到底是如何工作的。)所以我下载了1.5.5 ,停止服务,复制 DLL 和 EXE,重新启动服务,将新的 .so 文件复制到 Apache 的模块目录,然后重新启动 httpd。 没有运气。
有什么建议么? 这种特殊的“格式 9”似乎很少见......
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:
<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:
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.
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.
Any suggestions? This particular 'format 9' thing seems to be rare...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
请耐心听我进行以下解释,它证明了我对您的问题的假设,并将为您提供有关 SVN 如何工作的一些见解:
在 subversion 中,您有 2 个包含文件的位置:存储库和工作副本。
存储库存储历史记录,您可以在工作副本中从存储库中签出并提交回存储库。
Svnervice 和 apache svn 都允许您公开存储库
Tortoise 允许您从公开的存储库创建工作副本。
从您发布的内容来看,我认为您正在尝试公开工作副本而不是存储库(“.svn”文件夹是典型的工作副本,我敢打赌 e:\dev.svn 是签出目录)。
进入服务管理并找到运行 svn 服务的命令行,它应该包含如下所示的字符串: svnserve -d -r {somepath}
{somepath} 是存储库的路径。 这是您应该在 apache 的 SVNPath 配置指令中提供的路径。
最后一件事:不要允许使用 svnserve 和 apache svn 对同一存储库进行读/写访问,它可能会通过将其暴露于事务锁上的竞争条件来破坏您的存储库
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:
In subversion you have 2 places containing files: the repository and the working copy.
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.
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).
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}
The {somepath} is the path to your repository. This is the path you should provide in the SVNPath configuration directive of apache.
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