2012-12-07 105 views
2

如果我从svn存储库中检查目录,并且存储库中的路径包含括号,我尝试检查工作目录时收到svn'Commit failed'消息。包含圆括号的路径中的故障检查

我知道在路径名中使用圆括号不是很好的做法;我只是想清理别人的混乱。

这里的签出这样一个信息库的一个例子:

$ svn co http://cvs.xyzzy.com/svn/ie/Userhome/bchittenden/Test%20%28With%20Stupid%20Parentheses%29/ 
A Test (With Stupid Parentheses)/foo 
A Test (With Stupid Parentheses)/bar 
A Test (With Stupid Parentheses)/baz 
Checked out revision 61793. 

当我尝试提交,我得到以下信息:

$ svn ci 
Adding   branches 
Adding   tags 
Adding   trunk 
svn: Commit failed (details follow): 
svn: A MERGE response for '/svn/ie/Userhome/bchittenden/Test%20(With%20Stupid%20Parentheses)/tags' is not a child of the destination ('/svn/ie/Userhome/bchittenden/Test%20%28With%20Stupid%20Parentheses%29') 
svn: Your commit message was left in a temporary file: 
svn: '/tmp/Test (With Stupid Parentheses)/svn-commit.tmp' 

注意,改变得到住进存储库,我可以检查一个新版本的存储库并在那里工作,但当我尝试检查时,我会得到相同的消息。

如果我正确地解释了这一点,当SVN服务器尝试验证提交文件的名称时,它不正确地对路径名中的'('和')'字符进行URL编码。我在错误消息is not a child of the destination上尝试了几次Google搜索,但找不到解决方法。

+0

听起来好像是我的错误。只是为了确保:您* *安装了最新版本? – cxxl

+0

svnserv是古老的(这是2009年编译)。我不拥有它,但是我找到了解决办法;请参阅下面的答案。 –

回答

0

当我的工作目录下运行svn info | grep URL为我检查出来,我得到

$ svn info | grep URL 
URL: http://cvs.xyzzy.com/svn/ie/Userhome/bchittenden/Test%20%28With%20Stupid%20Parentheses%29 

这个SVN的第二部分匹配MERGE响应,即客户端。事实证明,我可以用svn switch更改URL来解决冲突:

$ svn switch 'http://cvs.xyzzy.com/svn/ie/Userhome/bchittenden/Test%20(With%20Stupid%20Parentheses)' 
E trunk 
E branches 
E tags 
Updated to revision 61900. 

现在的URL SVN的MERGE响应的第一部分(即服务器端)匹配,并没有冲突。

​​

在此之后,如果我更改了文件“酒吧”,并检查它在,将更改正确地承诺:

$ svn ci -m 'changed bar' 
Sending  bar 
Transmitting file data . 
Committed revision 61901.