2012-12-07 63 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.