2015-01-26 80 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