Subversion中特定代码行的变化历史

是否有可能在Subversion版本库中查看特定代码行的更改历史logging?

例如,我希望能够看到什么时候添加了一个特定的语句,或者当语句被修改时,即使它的行号不再一样。

我不知道在Subversion中通过时间跟踪语句的方法。

但是很简单,看到文件中的任何特定行最后一次使用svn blame更改。 检查SVNBook: svn blame参考 :

概要

 svn blame TARGET[@REV]... 

描述

显示指定文件或URL的作者和版本信息。 文本的每一行都以作者(用户名)的开头以及该行最后一次更改的修订号进行注释。

在TortoiseSVN客户端有一个非常好的function,可以让你:

  • 怪一个文件,显示每一行的最后一个变化(这是标准的)
  • 在上面的视图中点击特定的行后(这是好的)

第二个function就是这么说的 – 它显示了最后一行修改之前的注释修订。 通过迭代使用此function,可以追溯特定行的历史logging。

我通常会:

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

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

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

我只是自己做这个,发现这个(ye ole)在SO上的线程。 下面是我用CLI来解决这个问题的方法,特别是针对我的API改变的情况(例如,将某人远远过时的工作(不在某个分支上, 或者是在一个分支上)移回到基于最新date中继)。 例如,函数名称已经改变到不知道哪个函数需要被调用的地方。

步骤1

下面的命令允许我通过提交文件“fileName.h”中已经改变的提交进行翻页,并查看相应的修订号(注意:您可能需要根据svn日志文本或多或less地改变“10” )。

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

这会导致修改该文件的修订列表。

第二步

那么用blame (或者像别人指出的那样, annotate )就是简单的事情来缩小利益的修正。

 cd trunk svn blame fileName.h@r35948 | less 

例如发现修改利息是35948。

第三步

通过责备find了感兴趣的修订版本后,可以生成一个差异来利用SVN工具。

 svn diff -r35948:PREV fileName.h 

结论

使用视觉差异使得使用更新/更新的API名称识别旧的API名称变得更加容易。

在Eclipse中,您可以知道每行代码是使用SVN批注视图提交的,还是右键单击文件→ TeamShow annotation …。

 svn annotate 

来自TortoiseSVN的AKA SVN责备

svn blame向您显示哪个checkin修改了上一次文件中的任何一行。

这也适用于旧版本。

一开始就是命令svn责备(或注释,赞美)。 它会告诉你什么时候一行代码是最后一次修改的,以及它被修改的人。 例如:

  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 

这可以分两个阶段完成:

  1. svn blame /path/to/your/file > blame.tmp
  2. grep "your_line_of_text" blame.tmp

如果你不需要,你可以删除blame.tmp文件。

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

你正在寻找的命令是svn blame