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中的变化的痕迹。
所以首先,这是为什么?我是否以错误的方式回复了提交?
其次,有什么方法可以恢复文件历史吗?
感谢任何能够阐明这一点的人!
我的目标是以某种方式重新恢复历史,但没有其他开发人员需要知道坏提交。 看起来好像我可以从修正版之前创建一个修复分支,只合并坏提交记录,正常执行以下提交,然后将分支重新集成到trunk或类似文件中。 所以我会感兴趣的是一个解决方案,它会使错误的提交尽可能隐蔽(在我看来,如果没有其他提交遵循恶意提交,应该有可能完全恢复恶意提交,但是我不'不知道怎么...) – pete83 2015-01-27 21:13:18