Subversion中特定代码行的变化历史
是否有可能在Subversion版本库中查看特定代码行的更改历史logging?
例如,我希望能够看到什么时候添加了一个特定的语句,或者当语句被修改时,即使它的行号不再一样。
我不知道在Subversion中通过时间跟踪语句的方法。
但是很简单,看到文件中的任何特定行最后一次使用svn blame
更改。 检查SVNBook: svn blame
参考 :
概要
svn blame TARGET[@REV]...
描述
显示指定文件或URL的作者和版本信息。 文本的每一行都以作者(用户名)的开头以及该行最后一次更改的修订号进行注释。
在TortoiseSVN客户端有一个非常好的function,可以让你:
- 怪一个文件,显示每一行的最后一个变化(这是标准的)
- 在上面的视图中点击特定的行后(这是好的)
第二个function就是这么说的 – 它显示了最后一行修改之前的注释修订。 通过迭代使用此function,可以追溯特定行的历史logging。
我通常会:
- 首先运行
svn blame FILE
。 - 请注意特定行的最后一个修订版本。
-
使用
-r
参数执行另一个查询:svn blame FILE -r 1:REV
- 从那里手动跟踪。
这里的关键是需要多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批注视图提交的,还是右键单击文件→ Team → Show 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
这可以分两个阶段完成:
-
svn blame /path/to/your/file > blame.tmp
-
grep "your_line_of_text" blame.tmp
如果你不需要,你可以删除blame.tmp文件。
原则上,一个简单的脚本可以用任何脚本语言编写,大致相同。
你正在寻找的命令是svn blame
。