你如何修复SVN 409冲突错误

Ner*_*mer 12 svn apache macos subversive osx-snow-leopard

我曾经在OS X Leopard上使用SVN 1.4,一切都很好.几周前,我安装了OS X 10.6的新副本.Snow Leopard附带的SVN版本是1.6.5.我继续用1.6.6构建我自己的副本.我正在使用内置的apache服务器,只在本地托管存储库.

一切似乎工作正常,直到我真的试图做出一些事情.每次我尝试提交更改时,都会收到以下消息:

Transmitting file data .svn: Commit failed (details follow):
svn: MERGE of '/svn/svn2': 409 Conflict (http://localhost)
Run Code Online (Sandbox Code Playgroud)

这发生在我的旧存储库中,因此我创建了几个新的存储库.同样的交易.我也尝试使用系统附带的1.6.5版本......相同.最后,我尝试升级到最新的稳定SVN(1.6.9),但仍然遇到了同样的问题.

Apache错误会针对每个失败的提交记录以下内容:

[Mon Mar 29 19:53:10 2010] [error] [client ::1] Could not MERGE resource "/svn/svn2/!svn/act/d399326f-c20f-424f-bb68-3bb40503b5b1" into "/svn/svn2".  [409, #0]
[Mon Mar 29 19:53:10 2010] [error] [client ::1] An error occurred while committing the transaction.  [409, #2]
[Mon Mar 29 19:53:10 2010] [error] [client ::1] Can't open directory '/usr/local/svn/svn2/db/transactions/5-6.txn/\xeb\xa9\x0f\x1f': No such file or directory  [409, #2]
[Mon Mar 29 19:53:11 2010] [error] [client ::1] Could not DELETE /svn/svn2/!svn/act/d399326f-c20f-424f-bb68-3bb40503b5b1.  [500, #0]
[Mon Mar 29 19:53:11 2010] [error] [client ::1] could not open transaction.  [500, #2]
[Mon Mar 29 19:53:11 2010] [error] [client ::1] Can't open file '/usr/local/svn/svn2/db/transactions/5-6.txn/props': No such file or directory  [500, #2]
Run Code Online (Sandbox Code Playgroud)

并从访问日志:

::1 - - [30/Mar/2010:13:02:20 -0400] "OPTIONS /svn/svn2 HTTP/1.1" 401 401
::1 - user [30/Mar/2010:13:02:20 -0400] "OPTIONS /svn/svn2 HTTP/1.1" 200 188
::1 - user [30/Mar/2010:13:02:20 -0400] "PROPFIND /svn/svn2 HTTP/1.1" 207 647
::1 - user [30/Mar/2010:13:02:20 -0400] "PROPFIND /svn/svn2 HTTP/1.1" 207 647
::1 - user [30/Mar/2010:13:02:20 -0400] "PROPFIND /svn/svn2/!svn/vcc/default HTTP/1.1" 207 398
::1 - user [30/Mar/2010:13:02:20 -0400] "PROPFIND /svn/svn2/!svn/bln/6 HTTP/1.1" 207 449
::1 - user [30/Mar/2010:13:02:20 -0400] "REPORT /svn/svn2/!svn/vcc/default HTTP/1.1" 200 1172
Run Code Online (Sandbox Code Playgroud)

奇怪的是,提交实际上提交了更改,但工作副本没有看到,并且一切都变得棘手.

我已经尝试了Google可以为这个问题考虑的每一个变体,但搜索结果几乎没用.我没有使用TortoiseSVN或任何特殊的东西,并且在新的存储库中提交失败,所以我知道这对我的旧存储库来说不是问题.

任何帮助将不胜感激.

更新
我尝试添加autoversioning到我的svn.conf文件.这是我的文件说的:

LoadModule dav_svn_module /usr/libexec/apache2/mod_dav_svn.so
<Location /svn>
  DAV svn
  SVNParentPath /usr/local/svn
  SVNAutoversioning on

  # how to authenticate a user
  AuthType Basic
  AuthName "Subversion repository"
  AuthUserFile /usr/local/etc/svn-auth-file

  # only authenticated users may access the repository
  Require valid-user
</Location>    
Run Code Online (Sandbox Code Playgroud)

更新(解决方案)

我只是想用实际的解决方案来更新它,以防其他人对完全无用的错误消息有同样的问题.问题在于apr和apr-util部分(如方案所示).我正在使用subversion依赖项包构建两者的副本.OS X 10.6也有它自己的版本.两个版本都是1.3.8.显然,我需要使用默认的apache安装所使用的版本.

所以,我从我的subversion构建中删除了apr和apr-util文件夹,以确保我没有再次构建我自己的副本.我再次从源代码构建了svn,这次使用以下配置:

./configure --with-apr=/usr/bin/ --with-apr-util=/usr/bin/ --with-ssl
Run Code Online (Sandbox Code Playgroud)

在重新构建之后,我重新启动了apache,并创建了一个新的svn repo.我能够检查出来,进行更改,并且没有任何问题地提交.然后,我尝试了我的旧回购,那些工作也很好.

谢谢大家的帮助!

sch*_*and 3

我在这里如履薄冰(409 不是很具体),但我能够提出两个问题:

\n\n
    \n
  1. 是否有任何提交前或提交后挂钩?
  2. \n
  3. 是否启用“自动版本控制”?
  4. \n
\n\n

如果有任何钩子,你确定它们不包含任何错误吗?您可以禁用它们进行测试吗?如果未启用自动版本控制,您可以尝试启用它进行测试吗?这应该按照以下方式工作

\n\n
<Location /repos>\n  DAV svn\n  SVNPath /var/svn/repository\n  SVNAutoversioning on\n</Location>\n
Run Code Online (Sandbox Code Playgroud)\n\n

使用时mod_dav_svn(请参阅上面的自动版本控制链接)。

\n\n

也许这将有助于阐明您的问题,我们(和/或谷歌:))可以从那里开始。

\n\n

顺便说一句:您发布的日志不是来自同一个提交,对吗?时差会很大吗?!?

\n\n

编辑: \n如果您很久以前发现了这一点,我深表歉意,但我会尝试一下:无法在 COMMIT (Apache 2.0.55) 上合并资源是 Google 为我找到的:)

\n\n

那里的 OP 写道“Apache 规定了要使用的APR版本”。这意味着您在编译 SVN 时必须引用正确的 APR 版本。我通过MacPorts在我的系统 (OS X 10.6) 上安装了 SVN (v1.6.9) 。我在本地不使用 WebDAV 或 Apache,但安装了 APR 1.3.12_1(仅供参考)。OP 建议--with-apxs=/path/to/bin/apxs在编译 SVN 时使用,尽管我不确定这是否适用于您的情况(我很久以前就开始猜测,您可能会注意到:))。

\n\n

您是否有机会检查 Apache 期望的 APR 版本与用于构建 SVN 的版本(例如,sudo port installed apr如果您使用 MacPorts,您可以用来查看系统上存在哪些 APR 版本)?

\n\n

仅供参考,摘自《按照您想要的方式构建 Apache》:

\n\n
\n

apxs是一个独立的实用程序,用于动态编译模块,而无需使用configure脚本或具有可用的 Apache 源代码。不过,它确实需要 Apache\xe2\x80\x99s\n 头文件,这些文件 --includedir在安装 Apache 时被复制\n 到由\n 定义的位置。但是,\xe2\x80\x99 使用apxs与 Apache 相同\n 配置选项构建的 \n非常重要;\n 否则,\xe2\x80\x99 将会对 Apache\xe2\ 的位置做出错误的\n 假设x80\x99s\n各种安装位置都是。

\n
\n