我曾经在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)
这发生在我的旧存储库中,因此我创建了几个新的存储库。同样的交易。我也尝试使用系统附带的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]
来自访问日志:
::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
奇怪的是,提交确实提交了更改,但是工作副本没有看到,并且一切都变得棘手。
我已经尝试了Google可以解决这个问题的所有变体,但搜索结果几乎没用。我没有使用TortoiseSVN或任何特殊的东西,并且在新的存储库上提交失败,所以我知道这对我的旧存储库来说不是问题。
非常感谢任何帮助。
更新
我试过在我的svn.conf文件中添加autoversioning。这是我的文件所说的内容:
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>
更新(解决方案)
我只是想用实际的解决方案来更新它,以防其他人在完全无用的错误消息中遇到同样的问题。问题在于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
再次构建之后,我重新启动了apache,并创建了一个新的svn repo。我能够检查出来,进行更改,并且没有任何问题地提交。然后我尝试了旧的回购,那些也很好用。
感谢大家的帮助!
答案 0 :(得分:3)
我这里的冰很薄(409不是很具体),但我能够提出两个问题:
如果有任何钩子,你确定它们没有任何错误吗?你可以禁用它们进行测试吗?如果未启用自动转换,您是否可以尝试启用它以进行测试?这应该按照
的方式工作<Location /repos>
DAV svn
SVNPath /var/svn/repository
SVNAutoversioning on
</Location>
使用mod_dav_svn
时(请参阅上面的自动转换链接)。
也许这有助于揭示您的问题,我们(和/或Google :))可以从那里接受它。
顺便说一下:你发布的日志不是来自同一个提交,对吧?时差会很大吗?!?
修改强> 抱歉,如果你很久以前就找到了,但我会试一试:Could not MERGE resource on COMMIT (Apache 2.0.55)是Google为我找到的东西:)
OP在那里写道“Apache指示要使用的APR版本”。这意味着在编译SVN时必须引用正确的APR版本。我在我的系统(OS X 10.6)上通过MacPorts安装了SVN(v1.6.9)。我没有在本地使用WebDAV或Apache,但我安装了APR 1.3.12_1(仅供参考)。 OP建议在编译SVN时使用--with-apxs=/path/to/bin/apxs
虽然我不确定这是否适用于您的情况(我很久以前就开始猜测,您可能会注意到:)。
你有可能检查Apache期望的APR版本与用于构建SVN的APR版本(例如,如果您使用的是MacPorts,可以使用sudo port installed apr
查看系统上的APR版本)?< / p>
仅供参考,摘自Building Apache the Way You Want It:
apxs
是一个独立的实用程序 无需动态编译模块 需要使用configure
脚本 或者拥有Apache源代码 可用。它确实需要Apache的 但是,头文件被复制了 到定义的位置 安装Apache时--includedir
。 但是,使用apxs
很重要 那是用同样的方式建造的 配置选项为Apache ; 否则,它会犯错误 关于Apache的地方的假设 各种安装位置都是。
答案 1 :(得分:1)
我有两个关于问题可能隐藏的想法,当然是猜测,所以请注意。
一方面,它可能只是文件权限问题。我知道,这听起来很愚蠢,但也许有一些配置文件,或者一个钩子作为方案建议,甚至是存储库结构中的一些文件夹,由于更新到10.6或构建新的svn版本而无法读取,所以我仔细检查一下。
第二个想法是检查svn工作的copy-client-server-repository版本的兼容性。来自颠覆的人发誓,1.5和1.6都不会破坏存储库级别的兼容性1.4(尽管他们在工作副本上这样做)。但是检查整个堆栈的格式是否一致并不会有什么坏处。当你在它的时候,确保你构建的apache库与10.6附带的apache 2.2.11兼容(同样,它们应该,但你永远不知道)
最后,祝你好运。
答案 2 :(得分:1)
首先建立基线。在Snow Leopard(10.6.3)的库存中,这正是我所做的。
使用内容
创建“/etc/apache2/other/svn.conf”LoadModule dav_svn_module /usr/libexec/apache2/mod_dav_svn.so
<Location /svn>
DAV svn
SVNParentPath /usr/local/svn
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /usr/local/svn/htpasswd
Require valid-user
</Location>
创建了subversion文件夹和存储库“test”:
sudo mkdir /usr/local/svn
sudo svnadmin create /usr/local/svn/test
sudo chown -R _www:_www /usr/local/svn
sudo htpasswd -cb /usr/local/svn/htpasswd testuser testpass
来自普通用户,主目录:
macmini:~ jclark$ mkdir Checkout && cd Checkout
macmini:Checkout jclark$ svn --username testuser checkout http://localhost/svn/test
Authentication realm: <http://localhost:80> Subversion repository
Password for 'testuser':
Checked out revision 0.
macmini:Checkout jclark$ cd test && touch test.txt && svn add test.txt && svn commit -m 'test' test.txt
A test.txt
Adding test.txt
Transmitting file data .
Commited revision 1.
macmini:test jclark$
现在,如果所有这些都能正常工作,那么你有一个由apache服务的工作库存1.6.5 subversion存储库。如果没有,那么你最有可能将苹果提供的svn二进制文件/库与你自己的(macports等)混合或存在权限问题。确保确定您正在使用Apple提供的二进制文件。 Apple确实略微修改了源代码,而且在过去将'ports'与'stock'混合时遇到了兼容性问题。至于权限,apache以用户_www,group _www的形式运行。确保所有文件和目录都是这样拥有的,并且不要忘记在使用svnadmin或其他东西直接操作svn存储库时更新它们。
由于这是有效的,将你的'svn2'存储库移回/ usr / local / svn(如果你还没有),在某处做一个干净的检查,并尝试提交测试。
如果您仍遇到问题,请尝试升级存储库。
sudo svnadmin upgrade /usr/local/svn/svn2
sudo chown -R _www:_www /usr/local/svn/svn2
重复结账/提交测试。
作为最后的手段,请再次转储并加载存储库。
sudo svnadmin dump /usr/local/svn/svn2 > /tmp/svn2.dump
sudo svnadmin create /usr/local/svn/svn3
sudo svnadmin load /usr/local/svn/svn3 < /tmp/svn2.dump
sudo chown -R _www:_www /usr/local/svn/svn3
重复结账/提交测试,这次使用/ svn / svn3。
享受您的固定存储库...希望:)
<强>更新强>
subversion命令行客户端中可能存在错误。做完之后:
mkdir \!vcc && touch \!vcc/default
svn add \!vcc && svn commit -m 'test'
svn log
注意svn log的输出(至少对我来说)是什么都没有。来自乌龟的Svn日志很好,这表明服务器(如上面的设置)正常工作。
要尝试的另一件事是通过'file'而不是'http'访问存储库。将整个存储库复制到您的主目录或您的用户所有者的某个位置,然后检查它(即svn checkout / Users / Shared / svn / svn2)并尝试提交。
答案 3 :(得分:0)
您是否尝试过Versions适用于OSX的SVN客户端?它不是你的问题的解决方案,但可能是另一种选择。我和我的团队在使SVN和OSX相互通信方面存在一些问题,因此寻找替代客户端和版本对我们来说非常有用。
答案 4 :(得分:0)
chown -R apache:apache svn
chmod -R 770 svn
答案 5 :(得分:0)
这解决了我的冲突:我备份了我的本地文件,然后从服务器中取出所有内容。然后,当我插入并推送我的备份文件时,409冲突错误没有再次出现。
此致 凯文