如何找到已删除然后重新提交到SVN的文件的修订历史记录?
时间:2020-03-05 18:44:48 来源:igfitidea点击:
这是"如何从SVN的修订版本中删除1个文件?"的问题。但是因为答案可能截然不同,而且我相信知道答案会给其他人带来好处。 (我不知道答案。)
回答了上一个问题,我发现无法从SVN中删除修订。第二个最佳解决方案是从SVN中删除文件,提交,然后重新添加文件并再次提交。
现在,我要确保原始文件的修订历史记录已消失。因此,我希望对问题"我如何才能找到已删除然后重新提交给SVN的文件的修订历史记录"的答案?是你做不到。
解决方案
回答
我会说我们不能在SVN的眼中创建一个新文件,从而创建一个修订树。
可能可以独立恢复旧树(不确定是我们管理的是实际删除还是仅是SVN删除),但是旧修订树与新修订树之间没有链接。
回答
用一个简单的
svn log -v [folder]
我们可以快速浏览添加和删除。
------------------------------------------------------------------------ r14 | kame | 2008-08-29 04:23:43 +0200 (ven., 29 ao?2008) | 1 line Chemins modifié : A /a.txt Readded a ------------------------------------------------------------------------ r13 | kame | 2008-08-29 04:23:24 +0200 (ven., 29 ao?2008) | 1 line Chemins modifié : D /a.txt Delete a ------------------------------------------------------------------------ r12 | kame | 2008-08-29 04:23:06 +0200 (ven., 29 ao?2008) | 1 line Chemins modifié : A /a.txt
svn日志不会显示该文件,svn diff会假装该旧修订版不存在,但是针对该旧修订版的svn checkout将很高兴为我们提供旧文件。
回答
是什么让我们认为无法从Subversion删除修订?给我们另一个问题(svndumpfilter`)的解决方案可以做到这一点(请参阅参数--drop-empty-revs和--renumber-revs)!而且,当修订版本消失时,显然没有办法了解修订历史记录,因为它从来没有出现过。
回答
简短答案:我们可以
长答案:
不幸的是(对于我们来说,但对于大多数人而言可能不是),已删除文件的修订历史记录仍然存在,很难获取。
这是一个例子:
$ touch one $ svn add one $ svn ci -m "Added file one" $ date >> one $ svn ci -m "Updated file one" $ date >> one $ svn ci -m "Updated file one again" $ svn log file:///repos/one ------------------------------------------------------------------------ r3 | andrewr | 2008-08-29 12:27:10 +1000 (Fri, 29 Aug 2008) | 1 line Updated file one again ------------------------------------------------------------------------ r2 | andrewr | 2008-08-29 12:26:50 +1000 (Fri, 29 Aug 2008) | 1 line Updated file one ------------------------------------------------------------------------ r1 | andrewr | 2008-08-29 12:25:07 +1000 (Fri, 29 Aug 2008) | 1 line Added file one ------------------------------------------------------------------------ $ svn delete one $ svn ci -m "Deleted file one" $ svn up $ touch one $ svn add one $ svn ci -m "Adding file one back in" $ svn log file:///repos/one ------------------------------------------------------------------------ r5 | andrewr | 2008-08-29 12:29:13 +1000 (Fri, 29 Aug 2008) | 1 line add one back ------------------------------------------------------------------------
看起来可以正常工作(旧的历史记录已消失),但是如果我们在较旧的版本中请求文件,则会获得历史记录
的已删除文件。
$ svn log -r 3:1 file:///repos/one ------------------------------------------------------------------------ r3 | andrewr | 2008-08-29 12:27:10 +1000 (Fri, 29 Aug 2008) | 1 line Updated file one again ------------------------------------------------------------------------ r2 | andrewr | 2008-08-29 12:26:50 +1000 (Fri, 29 Aug 2008) | 1 line Updated file one ------------------------------------------------------------------------ r1 | andrewr | 2008-08-29 12:25:07 +1000 (Fri, 29 Aug 2008) | 1 line Added file one ------------------------------------------------------------------------