2015-01-26 112 views
1

如果我做了以下SVN替換+還原丟失文件歷史記錄?

> svnadmin create testrepo 
> svn co file://$(pwd)/testrepo checkout 
> cd checkout 
> mkdir trunk 
> echo something > trunk/myfile.txt 
> svn add trunk 
> svn commit -m "first commit" 
> echo updated >> trunk/myfile.txt 
> svn commit -m "second commit" 

那麼自然,我得到

> svn up 
> svn log trunk/myfile.txt 
>> ------------------------------------------------------------------------ 
>> r2 | user | 2015-01-27 00:45:59 +0100 (Di, 27 Jan 2015) | 1 line 
>> 
>> second commit 
>> ------------------------------------------------------------------------ 
>> r1 | user | 2015-01-27 00:45:59 +0100 (Di, 27 Jan 2015) | 1 line 
>> 
>> first commit 
>> ------------------------------------------------------------------------ 

現在讓我們意外說我使用舊版本

> svn rm trunk 
> svn cp [email protected] trunk 
> svn commit -m "replacing trunk" 
> svn up 
> svn log trunk/myfile.txt 
>> ------------------------------------------------------------------------ 
>> r3 | user | 2015-01-27 00:45:59 +0100 (Di, 27 Jan 2015) | 1 line 
>> 
>> replacing trunk 
>> ------------------------------------------------------------------------ 
>> r1 | user | 2015-01-27 00:45:59 +0100 (Di, 27 Jan 2015) | 1 line 
>> 
>> first commit 
>> ------------------------------------------------------------------------ 

然後,我決定更換行李箱還原這個

> svn merge -c -3 . 
> svn commit -m "reverted" 
> svn up 
> svn log trunk/myfile.txt 
>> ------------------------------------------------------------------------ 
>> r4 | user | 2015-01-27 00:49:25 +0100 (Di, 27 Jan 2015) | 1 line 
>> 
>> reverted 
>> ------------------------------------------------------------------------ 
>> r3 | user | 2015-01-27 00:45:59 +0100 (Di, 27 Jan 2015) | 1 line 
>> 
>> replacing trunk 
>> ------------------------------------------------------------------------ 
>> r1 | user | 2015-01-27 00:45:59 +0100 (Di, 27 Jan 2015) | 1 line 
>> 
>> first commit 
>> ------------------------------------------------------------------------ 

所以很顯然,即使我恢復了邪惡的提交,我的文件歷史現在已經消失,我看不到任何在r2中的變化的痕跡。

所以首先,這是爲什麼?我是否以錯誤的方式回覆了提交?

其次,有什麼方法可以恢復文件歷史嗎?

感謝任何能夠闡明這一點的人!

回答

1

當您詢問有關日誌的Subversion時,您需要使用不同的peg修訂版。因此,要查看意外刪除之前的歷史記錄,請在之前將修訂修訂版設置爲之前的一個修訂版,並且您將再次看到您缺少的歷史記錄。

在你的榜樣,儘量

svn log [email protected] 

查看丟失的提交。如果您不確定哪個修訂版確切是錯誤的修訂版,請使用log命令使用-v標誌,並檢查是否有任何A行,例如,像這樣

svn log -v trunk 
+1

我的目標是以某種方式重新恢復歷史,但沒有其他開發人員需要知道壞提交。 看起來好像我可以從修正版之前創建一個修復分支,只合並壞提交記錄,正常執行以下提交,然後將分支重新集成到trunk或類似文件中。 所以我會感興趣的是一個解決方案,它會使錯誤的提交儘可能隱蔽(在我看來,如果沒有其他提交遵循惡意提交,應該有可能完全恢復惡意提交,但是我不'不知道怎麼...) – pete83 2015-01-27 21:13:18