无法检查包含括号的路径

时间:2012-12-07 14:25:04

标签: 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 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'

请注意,更改 do 会进入存储库,我可以查看存储库的新版本并在那里工作,但是当我尝试检查时,我会收到相同的消息那个。

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

1 个答案:

答案 0 :(得分: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 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.