2012-01-29 87 views
2

A 非常聰明開發人員幾乎刪除了整個存儲庫並提交了它(rev 210)。我的電腦上有一份工作副本,但版本庫相當龐大。SVN在服務器端恢復

我想創建一個新版本(211),它與上一次良好的修訂(209)相同。我不想保留修訂版210中的任何內容,這是錯誤的提交。這是開發商的錯,他們將不得不重寫任何事情,就我而言。

想法?

+0

切換到git的時間 – 2012-01-29 03:57:45

+1

觸發該開發人員的時間 – 2012-01-29 04:11:26

+2

刪除文件(或整個存儲庫)然後提交不會導致任何內容丟失。這是版本控制系統的重點,如果你犯了錯誤,它可以防止永久性丟失。 – 2012-01-29 04:22:22

回答

1

如果該開發者沒有刪除服務器上的存儲庫,那麼所有的代碼都是安全的。您只需要創建一個新的空文件夾,然後從版本209執行SVN簽出,而不是HEAD。這將爲您提供處於其修訂版209狀態的每個文件。您可以在任何開發工作站上執行此操作,無需在服務器上執行任何操作。

要恢復更改,只需在您的工作副本根上拉SVN顯示日誌(如果使用TSVN)窗口並選擇修訂版209,然後選擇還原爲修訂版 - 這將對修訂版中的更改進行反向合併210,然後您可以將其作爲版本211進行檢入。這可以解決您的問題。

如果開發人員刪除了SVN服務器上的存儲庫,則需要每日備份來恢復您的代碼。

只要服務器上的存儲庫完好無損,就不可能從SVN中刪除任何東西。當你刪除某些東西時,它從這一點開始就變得不可見,但你總是可以回到版本庫中任何版本的任何文件 - 你只需要去正確的版本。

+0

謝謝。這解決了這個問題。非常感激。 我知道代碼是安全的,我理解SVN的一部分。我只是想創建一個完全像209的新版本(211)。非常感謝! – 2012-01-29 06:37:07

+0

@ScottCrooks我很高興它有幫助。你介意在這種情況下接受我的答案嗎? – xxbbcc 2014-06-06 16:37:46

0

在Linux機器上一個基本的方法是:

cp PRJ ../../bkup 
svn up PRJ 
cp ../../bkup PRJ 
cd PRJ 
svn add * 
svn ci -m "everything again" PRJ 

希望你明白了吧

7

這可以通過reverse-merging解決:

以下命令將返回你的工作副本修訂狀態209:

svn merge -c -210 . 

然後com麻省理工學院:

svn ci -m "reverse merged revision 210" 
0

有這對我的作品一個醜陋的方式......只要你想刪除的最後一次提交,而不是一些在中間提交。

首先 - 關機SVN服務器和備份您的回購由svnadmin hotcopy repo repo_backup

轉到SVN服務器,然後繼續你的回購。看看./db/revs/X/,其中X是錯誤提交的第一個數字。你可以在那裏看到錯誤的提交文件(例如123)。刪除此文件,然後修改./db/current以指向之前的提交(例如122)。