2008-12-12 47 views
1

今天下午,在注意到一個破損的版本和一些文件看起來像舊版本(大約2周大)的事實後,我檢查了svn日誌。顯然就在今天下午,其中一位開發人員將舊版本目錄的「svn copy」複製到同一個目錄中。因此,該目錄中的所有文件的最新版本「頭部」看起來確實是舊的,並且所有的歷史「即日誌」甚至更老。從一個不幸的「svn副本」中恢復「

但是,我想我可以通過使用另一個「svn副本」(即疾病是治癒)恢復。我正在考慮做的是找出哪裏不好「SVN複製」做了修改(比如修訂版1234),減去1(1233)和做:

svn copy -r 1233 file://path/to/messed/up/dir file://path/to/messed/up/dir 

應該恢復最新的版本,以及回到我所有的歷史。我對嗎?

回答

7
svn rm file:///path/to/messed/up/dir 
  • 複製10根據the SVN book

    svn merge -c -1234 
    

    應該做的伎倆。

    這本書中有關於此的整個section

    的詳細解釋: -c -1234轉化爲-r 1234:1233,這將恢復從修訂1234

  • -2

    可能是,但先備份。

    實際上,我還想知道爲什麼你沒有每日備份,你只能從已經恢復......你的SVN存儲庫肯定足夠重要嗎?

    +0

    理論上的變化,SVN倉庫本身是這樣的東西備份。備份您的存儲庫本身只應歸因於「外部」災難(硬件,rm -rf,洪水等)。 – 2008-12-12 15:19:17

    1

    這個副本命令不會,原因有二:

    1. 爲目標目錄已經存在,SVN會將複製請求作爲複製到目標目錄;你不能用cp覆蓋。所以這會創建/ dir/dir。當創建dir的HEAD版本時,也必須首先執行刪除操作。
    2. 這是一個將HEAD對象的版本1233複製到/ dir的請求。但是,HEAD中的dir對象沒有修訂1233;刪除了具有相同路徑的對象。

    要解決這個問題,就需要

    1. 刪除當前目錄中的對象:使用 「peg修訂版本」

      svn cp file:///path/to/messed/up/[email protected] file:///path/to/messed/up