Subversion中特定代码行的更改历史

时间:2008-09-10 08:32:21

标签: svn

是否可以在Subversion存储库中查看特定代码行的更改历史记录?

例如,我希望能够查看添加特定语句的时间或更改该语句的时间,即使其行号不再相同。

11 个答案:

答案 0 :(得分:51)

我不知道在Subversion中跟踪语句的方法。

但是,使用svn blame查看文件中的任何特定行的上次更改时很简单。检查SVNBook:svn blame reference

<强>概要

svn blame TARGET[@REV]...

<强>描述

显示指定文件或网址的内嵌作者和修订信息。每行文本都以作者(用户名)开头注释,最后一次更改为该行的修订号。

答案 1 :(得分:42)

TortoiseSVN客户端中有一个非常好的功能,可以让你:

  • 责备文件,显示每行的最后一次更改(这是标准的)
  • “责备以前的修订”,点击上面视图中的特定行(这是好的)

第二个功能完成它所说的内容 - 它显示了对该行的最后一次修改之前的注释修订。通过迭代使用此功能,您可以追溯特定行的历史记录。

答案 2 :(得分:13)

我通常会:

  1. 首先运行svn blame FILE
  2. 请注意特定行的最新修订版。
  3. 使用-r参数执行另一个查询:

    svn blame FILE -r 1:REV
    
  4. 从那里手动追踪。

答案 3 :(得分:2)

这可以分两个阶段完成:

  1. svn blame /path/to/your/file > blame.tmp
  2. grep "your_line_of_text" blame.tmp
  3. 如果您不需要,可以删除blame.tmp文件。

    原则上,一个简单的脚本可以用大致相同的任何脚本语言编写。

答案 4 :(得分:2)

Eclipse中,您可以知道代码的每一行何时使用SVN注释视图提交,或者右键单击文件→团队显示注释.. 的。

答案 5 :(得分:2)

这里的关键是需要多少历史。正如其他人所指出的那样,简短的回答是:svn blame(详见svn help blame)。如果你在历史上遥远或处理重大变化,你可能需要的不仅仅是这一个命令。

我必须自己做,并在SO上发现这个(ye ole)线程。这就是我用CLI来解决它的问题,特别是对于我已经改变了API的情况(例如,移植某人远期过时的工作(不是在分支上, arrgh!)进入基于最新主干的功能分支。例如。函数名称已经改变到足以显示需要调用哪个函数的地方。

第一步

以下命令允许我翻阅文件“fileName.h”中已更改内容的提交,并查看相应的修订号(注意:您可能需要根据您的更多或更少内容更改'10' svn log text)。

svn log | grep -C 10 "fileName.h" | less

这会生成修改此文件的修订列表。

第二步

然后,使用blame(或其他人指出,annotate)缩小到感兴趣的修订是一件简单的事情。

cd trunk
svn blame fileName.h@r35948 | less

E.g。发现感兴趣的修订版是35948。

第三步

通过blame找到感兴趣的修订版后,可以生成差异以利用SVN工具。

svn diff -r35948:PREV fileName.h

结论

使用可视化差异,可以更容易地使用更新/更新的API名称识别旧的API名称。

答案 6 :(得分:1)

svn annotate

来自TortoiseSVN的AKA SVN Blame

答案 7 :(得分:0)

svn blame向您显示上次修复文件中的哪一行。

这也适用于旧版本。

答案 8 :(得分:0)

一个开始是命令svn blame(或注释,赞美)。它会在最后一次修改代码行以及修改它时向您显示。 e.g:

  4564    wiemann # $Id$
  4564    wiemann # Author: David Goodger <goodger@python.org>
   778    goodger # Copyright: This module has been placed in the public domain.
   217    goodger 

答案 9 :(得分:0)

如果您使用Emacs,则内置软件包vc可以执行此操作。

  1. 导航到相关文件。
  2. 使用 Mx vc-annotate Cx v g vc-annotate >。
  3. 每行都会显示其修订版本,就像普通的svn blame
  4. a vc-annotate-revision-previous-to-line)将导航到您所在行的修订版本之前的修订版本。

答案 10 :(得分:-1)

您正在寻找的命令是svn blame