我曾经在OS上使用SVN1.4,一切都很好。几周前,我安装了一个新的OSX10.6版本。雪豹附带的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)这发生在我的旧存储库中,所以我创建了几个新的存储库。同样的交易。我还尝试使用system...same附带的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奇怪的是,提交实际上提交了更改,但是工作副本没有看到这一点,一切都变得很糟糕。
我试着用谷歌搜索所有我能想到的关于这个问题的变化,但是搜索结果几乎毫无用处。我不使用TortoiseSVN或任何特殊的东西,并且在新的存储库上提交失败,所以我知道这不是我以前的repos的问题。
任何帮助都将不胜感激。
更新
我尝试将自动版本控制添加到我的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> 更新(解决方案)
我只是想用实际的解决方案来更新这一点,以防其他人在完全没有帮助的错误消息中遇到同样的问题。问题在于apr和apr-util部分(正如scherand所建议的)。我正在使用subversion依赖项包构建两者的副本。OSX10.6也有自己的版本。两个版本均为1.3.8。显然,我需要使用默认apache安装所使用的版本。
因此,我从我的subversion构建中删除了apr和apr-util文件夹,以确保我不再构建自己的副本。我再次从源代码构建了svn,这次使用了以下配置:
./configure --with-apr=/usr/bin/ --with-apr-util=/usr/bin/ --with-ssl在重新构建之后,我重新启动了apache,并创建了一个新的svn。我能够在没有任何问题的情况下检查它、进行更改和提交。然后,我尝试了我的旧回复,这些也同样有效。
谢谢大家的帮助!
发布于 2010-04-07 06:11:53
我在这里非常谨慎(409不是很具体),但我可以提出两个问题:
如果有钩子,你确定它们不包含任何错误吗?你能让他们停用做个测试吗?如果未启用自动版本控制,是否可以尝试启用它以进行测试?这应该遵循以下原则:
<Location /repos>
DAV svn
SVNPath /var/svn/repository
SVNAutoversioning on
</Location>使用mod_dav_svn时(请参阅链接到上面的自动版本控制)。
也许这将有助于了解您的问题,我们(和/或Google:)可以从那里着手。
顺便说一句:你发布的日志不是同一个提交的,对吗?时差会很大?!
编辑:道歉,如果你很久以前就发现了,但我会试一试:无法在提交时合并资源(Apache2.0.55)是谷歌为我找到的东西:)
那里的OP写道:"Apache命令要使用的4月版本“。这意味着在编译SVN时必须引用正确的APR版本.我在我的系统(OSX10.6)上通过MacPorts安装了SVN (v1.6.9)。我并不在本地使用WebDAV或Apache,但我已经安装了APR 1.3.12_1 (仅供参考)。OP建议在编译SVN时使用--with-apxs=/path/to/bin/apxs,尽管我不确定这是否适用于您的情况(我很久以前就开始猜测了,您可能会注意到:)。
您是否有可能检查APR版本Apache期望值与用于构建SVN的版本(例如,如果使用sudo port installed apr,您可以使用MacPorts查看系统上存在哪些APR版本)?
仅供参考,摘录自以你想要的方式构建Apache
apxs是一个独立的实用程序,用于动态编译模块,而不需要使用configure脚本或有可用的configure源代码。不过,它确实需要Apache的头文件,这些文件在安装Apache时被复制到--includedir定义的位置。但是,使用与Apache的配置选项相同的apxs很重要;否则,就会对Apache的不同安装位置做出错误的假设。
发布于 2010-04-07 11:43:25
我有两个想法,问题可能隐藏在哪里,这当然是胡思乱想,所以请注意。
一方面,这可能只是文件权限问题。我知道,这听起来很傻,但是也许有一些配置文件,或者像scherand建议的那样有一个钩子,或者存储库结构中的某个文件夹,这些文件夹在10.6更新或者构建新的svn版本时都是不可读的,所以我会反复检查一下。
第二个想法是检查svn工作副本-客户机-服务器-存储库版本的兼容性。subversion的工作人员发誓,1.5和1.6在存储库级别上都不会破坏与1.4的兼容性(尽管他们在工作副本上是这样做的)。但是,检查整个堆栈的格式是否一致并不会有什么影响。同时,确保您构建的apache库与10.6版的Apache2.2.11兼容(同样,它们应该兼容,但您永远不知道)
最后祝你好运。
发布于 2010-04-09 06:14:50
首先建立一个基线。关于雪豹的股票安装(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文件夹和存储库“测试”:
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二进制文件/lib与您自己的(macport等)或混合使用--存在权限问题。确保使用的是苹果提供的二进制文件。苹果确实稍微修改了源代码,过去我在把“端口”和“股票”混在一起时遇到了兼容性问题。至于权限,apache以用户_www、组_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/svn 3。
享受你的固定仓库..。希望:)
更新
subversion命令行客户机中可能存在bug。做完后:
mkdir \!vcc && touch \!vcc/default
svn add \!vcc && svn commit -m 'test'
svn log注意,svn日志的输出(至少对我来说)是没有意义的。来自tortoise的Svn日志很好,这表明服务器(如上面的安装程序)工作正常。
另一件要尝试的事情是通过'file‘而不是'http’访问存储库。将整个存储库复制到您的主目录或用户是所有者的某个位置,然后检查它(即。svn签出/用户/共享/svn/svn 2)并尝试提交。
https://stackoverflow.com/questions/2547400
复制相似问题