2014-03-25 163 views

回答

2

svnbook有一個topic關於如何處理這個。

它基本上可以歸結爲:

  • 如果文件缺失的提交,你可以使用svn merge -c -revnum恢復該文件的唯一的事情。
  • 如果有其他變化的承諾,你可以將文件從版本複製刪除前 - svn copy [email protected] file
2

移除文件。如果你只是想「得到」的文件,你可以這樣做:

svn cat -r 1950 file > file 

但已經指出的那樣,這將不會檢索任何文件歷史記錄,並且會被SVN看作是一個全新的文件。

+0

這不會保留任何以前的文件歷史記錄。 – jamessan

+0

@jamessan op確實說過「獲取」,這並不一定意味着需要在源代碼控制中使用它。 – crashmstr

+0

當然。只是指出這種方法的一個警告,以防它恢復到源代碼管理。 – jamessan

1
  1. 首先,運行svn log -v,看看你是否能找到刪除的修正文件。
  2. 一旦找到文件被刪除的位置,您可以使用svn mergesvn cp取回文件。

比方說,你需要在trunk/proj/mydir恢復foo.txt

$ svn log -v $REPO/trunk/proj/mydir | less 

然後你可以使用/D .*foo.txt來搜索文件的輸出少。你會發現該文件是在修訂1235刪除:

如果這是唯一的修訂1235一樣,或者你決定要復原的那個版本剩下的東西,你可以用svn merge -c

$ svn co --depth=immediates $REPO/trunk/proj/mydir # No need to checkout sub directories too 
$ cd mydir 
$ svn merge -c -1235 .        # Undoes the delete 
$ svn commit -m "Restored file 'foo.txt' deleted in revision 1235" 

有時你只是想恢復該文件,而不是修訂版中的所有其他更改。在這種情況下,請使用svn cp命令。

$ svn cp -r1234 -m"Restored $foo.txt removed in rev 1235" \ 
     $REPO/trunk/proj/mydir/[email protected] $REPO/trunk/myproj 

或者你也可以做到這一點,雖然檢出:

$ svn co --depth=immediates $REPO/trunk/proj/mydir # No need to checkout sub directories too 
$ cd mydir 
$ svn cp -r1234 [email protected] .      # Undoes the delete 
$ svn commit -m "Restored file 'foo.txt' deleted in revision 1235" 

請注意,我用的版本1234,而不是1235,因爲該文件已被刪除,如果你願意,你可以這樣做而不做結賬在修訂版1235中,並不存在於該修訂版中。我使用-r來指定我希望修訂1234foo.txt,並在URL的末尾指定@1234以指定該文件存在於版本庫目錄佈局的修訂版1234中。

+0

當我運行第一個命令時,我遇到了錯誤,發現沒有找到對象,它嘗試在磁盤上搜索它。 – jcubic

+0

'$ REPO'是你的Subversion版本庫的URL。不知道它是什麼,我只是把'REPO'。如果您的存儲庫位於'http:// foo.com/svn'上,則該命令將是'svn ls http:// foo.com/svn/trunk/proj/mydir',假定'trunk/proj/mydir'是缺少的文件所在的目錄。 –