如果我从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搜索,但找不到解决方法。
答案 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.