如何找到已删除然后重新提交到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
------------------------------------------------------------------------