如何找到以前删除但仍存储在源代码管理中的有用代码?

时间:2010-04-25 13:06:55

标签: svn version-control

每当有人询问如何处理不再需要的代码时,答案通常为"delete it, restore it from source control if you need it back"

现在如何在存储库中找到这段源代码?为简单起见,我们将范围限制为SVN - 我怀疑使用任何其他源控制系统在这方面不会有太大的区别(如果我错了,请纠正我)。

如果我删除该代码并提交更改,它将不再是最新版本。如何在不导出每个修订版并彻底搜索的情况下找到它(这几乎是不可能的)?

6 个答案:

答案 0 :(得分:5)

您需要使用差异工具,大多数svn存储库都有它们。右键单击要回滚的文件并选择“差异”或“差异”或类似(花费在实现上)然后它会要求将当前版本与早期版本进行比较 - 如果您知道早期版本的大致日期然后选择那个版本(日期/时间戳通常很明显),你会看到两个版本并排。然后,您可以选择不同的位(通常为红色),右键单击它们并选择集成它们。

您用于SVN的客户端工具将确定详细信息。

答案 1 :(得分:4)

另一种方法是搜索日志消息 - 您可能会在以下方面留下评论:

  

删除了XYZ功能

当你做出改变时。

答案 2 :(得分:3)

我这样做的方法是在我知道丢失的代码处于活动状态时考虑一个日期,然后获取整个源树,就像在那个日期那样。如果我的日期错了,我会每天 x 日/周/月,直到我归零为止。

svn checkout --revision {2002-02-17}

答案 3 :(得分:3)

最正确的答案是:你做不到。有一些方法可以帮助您完成该任务,但不可能自动执行,因为:

  • 你不知道它在哪个文件
  • 您不知道源代码或部分内容
  • 你不记得代码删除的时间。
  • ...

电脑无法读懂我们的想法。也就是说,当然还有其他工具可以帮助您,例如上面提到的工具,或像trac这样的图形前端(我非常喜欢这个目的)。

答案 4 :(得分:2)

据推测,代码注释或修订注释都有关键字来定位您正在寻找的代码片段:

SVN查询 - http://svnquery.tigris.org/

  

“SvnQuery是一个用于subversion存储库的快速全文搜索引擎。它搜索每个版本中的每个文件。不仅文件的内容被索引,而且它的完整元数据,如路径,作者,评论和属性。提供了一个简单的,类似Google的网络前端,但预计查询库和索引机制可以是在其他前端重用,例如Web服务或Visual Studio插件。

     

SvnQuery在C#3.0中实现,ASP.NET用于Web前端。全文搜索由Lucene.Net完成,提供了惊人的性能。 ......“

此处描述了查询语言:
http://svnquery.tigris.org/servlets/ProjectProcess?pageID=o0dpdE&freeformpage=SvnWebQueryHelp

答案 5 :(得分:0)

  

我怀疑使用任何其他源控制系统在这方面不会有太大的区别(如果我错了,请纠正我)。

这是错误的。分布式版本控制(例如git或hg)可以相对有效地完成此任务。

例如,在git中,要查找名为foo的已删除函数,可以执行git log -S foo,它将显示添加或删除包含“foo”的行的所有提交。

如果由于某种原因想要坚持任意SVN限制,请首先使用git-svn克隆SVN存储库。