首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复SVN 409冲突错误

如何修复SVN 409冲突错误
EN

Stack Overflow用户
提问于 2010-03-30 17:54:52
回答 6查看 21.1K关注 0票数 12

我曾经在OS上使用SVN1.4,一切都很好。几周前,我安装了一个新的OSX10.6版本。雪豹附带的SVN版本是1.6.5。我继续用1.6.6制作了我自己的版本。我正在使用内置的apache服务器,并且只在本地托管存储库。

一切看起来都很好直到我真的想做点什么。每次尝试提交更改时,我都会收到以下消息:

代码语言:javascript
复制
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错误记录每个失败提交的以下内容:

代码语言:javascript
复制
[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]

并从访问日志:

代码语言:javascript
复制
::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文件中。我的档案是这样写的:

代码语言:javascript
复制
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,这次使用了以下配置:

代码语言:javascript
复制
./configure --with-apr=/usr/bin/ --with-apr-util=/usr/bin/ --with-ssl

在重新构建之后,我重新启动了apache,并创建了一个新的svn。我能够在没有任何问题的情况下检查它、进行更改和提交。然后,我尝试了我的旧回复,这些也同样有效。

谢谢大家的帮助!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-04-07 06:11:53

我在这里非常谨慎(409不是很具体),但我可以提出两个问题:

  1. 是否有预提交或提交后挂钩到位?
  2. 启用"自动版本控制“吗?

如果有钩子,你确定它们不包含任何错误吗?你能让他们停用做个测试吗?如果未启用自动版本控制,是否可以尝试启用它以进行测试?这应该遵循以下原则:

代码语言:javascript
复制
<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的不同安装位置做出错误的假设。

票数 3
EN

Stack Overflow用户

发布于 2010-04-07 11:43:25

我有两个想法,问题可能隐藏在哪里,这当然是胡思乱想,所以请注意。

一方面,这可能只是文件权限问题。我知道,这听起来很傻,但是也许有一些配置文件,或者像scherand建议的那样有一个钩子,或者存储库结构中的某个文件夹,这些文件夹在10.6更新或者构建新的svn版本时都是不可读的,所以我会反复检查一下。

第二个想法是检查svn工作副本-客户机-服务器-存储库版本的兼容性。subversion的工作人员发誓,1.51.6在存储库级别上都不会破坏与1.4的兼容性(尽管他们在工作副本上是这样做的)。但是,检查整个堆栈的格式是否一致并不会有什么影响。同时,确保您构建的apache库与10.6版的Apache2.2.11兼容(同样,它们应该兼容,但您永远不知道)

最后祝你好运。

票数 1
EN

Stack Overflow用户

发布于 2010-04-09 06:14:50

首先建立一个基线。关于雪豹的股票安装(10.6.3),这正是我所做的。

创建了"/etc/apache2/other/svn.conf“,内容如下:

代码语言:javascript
复制
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文件夹和存储库“测试”:

代码语言:javascript
复制
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

来自普通用户的主目录:

代码语言:javascript
复制
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 (如果您还没有),在某个地方做一个干净的签出,然后尝试一个测试提交。

如果仍然遇到问题,请尝试升级存储库。

代码语言:javascript
复制
sudo svnadmin upgrade /usr/local/svn/svn2
sudo chown -R _www:_www /usr/local/svn/svn2

重复签出/提交测试。

作为最后手段,再次转储和加载存储库。

代码语言:javascript
复制
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。做完后:

代码语言:javascript
复制
mkdir \!vcc && touch \!vcc/default
svn add \!vcc && svn commit -m 'test'
svn log

注意,svn日志的输出(至少对我来说)是没有意义的。来自tortoise的Svn日志很好,这表明服务器(如上面的安装程序)工作正常。

另一件要尝试的事情是通过'file‘而不是'http’访问存储库。将整个存储库复制到您的主目录或用户是所有者的某个位置,然后检查它(即。svn签出/用户/共享/svn/svn 2)并尝试提交。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2547400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档