是否可以查看Subversion存储库中特定代码行的更改历史记录?
例如,我希望能够看到何时添加了特定语句或何时更改了该语句,即使其行号不再相同。
Answers:
我不知道在Subversion中通过时间跟踪语句的方法。
但是,很容易查看使用上次更改文件中的任何特定行的时间svn blame
。检查SVNBook:svn blame
参考:
概要
svn blame TARGET[@REV]...
描述
内联显示指定文件或URL的作者和修订信息。每行文本均以作者(用户名)和对该行的最后更改的修订号开头。
在TortoiseSVN客户端中,有一个非常不错的功能,可让您:
第二个功能是说的-在行的最后修改之前显示带注释的修订。通过迭代使用此功能,您可以追溯特定行的历史记录。
我通常会:
svn blame FILE
第一。使用-r
参数进行另一个查询:
svn blame FILE -r 1:REV
svn annotate $file_path | head -n$line_no | tail -1 | awk '{print $1}'
这可以分两个阶段完成:
svn blame /path/to/your/file > blame.tmp
grep "your_line_of_text" blame.tmp
如果不需要,可以随后删除blame.tmp文件。
原则上,简单的脚本可以用任何大致相同的脚本语言编写。
这里的关键是需要多少历史记录。正如其他人指出的那样,简短的答案是:(有关详细信息,svn blame
请参见svn help blame
)。如果您要追溯到很远的历史或要进行重大更改,则可能需要的不仅仅是此命令。
我只需要自己做,然后在SO上找到这个(线程)线程。这是我仅使用来解决此问题的方法CLI
,特别是针对我的情况,即API已更改(例如,在将某人的过时工作(不在分支上,arrgh!)移植到一个基于最新版本的功能分支中时)枣树干)。例如,函数名称已更改为足够明显的地方,不清楚需要调用哪个函数。
以下命令使我可以浏览文件“ fileName.h”中发生了更改的提交,并查看相应的修订号(注意:根据svn日志文本,您可能必须更改“ 10”以获取更多或更少的上下文) )。
svn log | grep -C 10 "fileName.h" | less
这将导致在其中修改此文件的修订列表。
然后,使用blame
(或像其他人指出的那样annotate
)缩小到感兴趣的修订范围很简单。
cd trunk
svn blame fileName.h@r35948 | less
例如,发现利息的修订为35948。
通过指责找到了感兴趣的修订后,就可以产生一个差异来利用SVN工具。
svn diff -r35948:PREV fileName.h
具有视觉差异使得通过更新/更新的API名称更容易识别旧的API名称。
grep
使用旧的API /函数名称,并找到一条注释,例如“将func_FindParm更改为func_GetParm ” 。
svn annotate
阿卡SVN惹的祸从TortoiseSVN的。