Svn 检查包含括号的路径时出现问题

Svn 检查包含括号的路径时出现问题,svn,Svn,如果我从svn存储库中签出一个目录,并且存储库中的路径包含括号,那么当我尝试重新签入工作目录时,会收到一条svn“Commit failed”(提交失败)消息 我知道在路径名中使用括号不是好的做法;我只是想帮别人收拾残局 下面是一个签出此类存储库的示例: $ svn co http://cvs.xyzzy.com/svn/ie/Userhome/bchittenden/Test%20%28With%20Stupid%20Parentheses%29/ A Test (With Stupid

如果我从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编码。我尝试了几次谷歌搜索错误消息
不是目的地的子对象
,但找不到解决方法。

当我在工作目录上运行
svn info | grep URL
时,我发现

$ svn info | grep URL
URL: http://cvs.xyzzy.com/svn/ie/Userhome/bchittenden/Test%20%28With%20Stupid%20Parentheses%29
这与SVN合并响应的第二部分相匹配,即客户端。事实证明,我可以使用
svn开关
更改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合并响应的第一部分(即服务器端)匹配,并且没有冲突

$ svn info | grep URL
URL: http://cvs.xyzzy.com/svn/ie/Userhome/bchittenden/Test%20(With%20Stupid%20Parentheses)
在此之后,如果我更改了文件“bar”,并将其签入,更改将正确提交:

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

听起来像个虫子。只是为了确保:您在任何地方都安装了最新版本吗?svnserv是一个古老的版本(它是2009年的编译版本)。我不拥有它,但是我找到了一个解决办法;见下面的答案。