2011-12-19 24 views
1

嘗試反向合併以恢復1個特定文件。我相信我明白它應該如何工作,但會發生奇怪的錯誤。奇數SVN反向合併錯誤消息

我重讀svn書,谷歌和堆棧等

問題:

我要指定1個特定文件進行恢復。

SVN不喜歡本地文件引用,因爲該文件不存在,但在線示例似乎使用本地文件名。

它也不喜歡完整的http路徑,因爲它不在存儲庫中。我知道它現在不存在,但它在那裏。即使使用@peg語法仍然會出現錯誤。

例子:

失敗嘗試:

svn merge -c -100 .myFile 
Error: .myFile not under version control 

svn merge -c -100 http://server/repo/Project/trunk/.myFile 
Error: svn: '/repo/!svn/bc/120/Project/.myFile' path not found 
Note that rev 120 is between the delete (r100) and now (r150) 

svn merge -c -100 http://server/repo/Project/trunk/[email protected] 
Error: svn: File not found: revision 100, path '/Project/trunk/.myFile' 

svn merge -c -100 . .myFile 
Don't recall specific error. 

svn merge -c -100 . http://server/repo/Project/trunk/[email protected] 
Error: svn: Cannot specify a revision range with two URLs 

...以及其他各種組合....

我真的很爲難。我相信我理解反向合併,以及爲什麼有時需要@pegs,但是這種特殊的組合非常令人煩惱。

我有解決方法:我可以恢復所有文件,然後清理。或者只是複製並粘貼一箇舊版本,我可以用svn cat命令來完成。

但我想了解「正確」的方式。

回答

1

今天在一個稍微不同的問題上工作,我相信我終於找到了我的答案。

我正在合併單個文件中的更改,還原已刪除的副本,因此不完全相同。

一個關鍵的變化我做:

  • 我用了一個明確的-r FROM:TO範圍,而不是僅僅使用-c快捷。

其他景點:

  • 來源應該是在URL形式
  • 目標應該是在當地./filename形式

假設的例子修訂回顧:

  • 目前系統爲r150
  • 文件中R100
  • 文件被刪除上次出現在R99(雖然沒有修改過)
  • 文件被最後添加/更新R85
  • 注:我的示例文件名是Unix隱藏文件因此它通過啓動點 - 大多數文件不會有。

撤消刪除,我認爲這將是:

cd localWorkDir/Project/trunk 
svn update 
svn merge -r100:85 http://server/repo/Project/trunk/.myFile ./.myFile 
svn commit -m "restoring files" 
(message saying committed r151) 

所以我覺得-c語法,合併單個文件的時候,是有問題的。