【发布时间】:2008-09-10 08:32:20
【问题描述】:
是否可以查看 Subversion 存储库中特定代码行的更改历史记录?
例如,我希望能够查看添加特定语句或更改该语句的时间,即使它的行号不再相同。
【问题讨论】:
标签: svn
是否可以查看 Subversion 存储库中特定代码行的更改历史记录?
例如,我希望能够查看添加特定语句或更改该语句的时间,即使它的行号不再相同。
【问题讨论】:
标签: svn
我不知道在 Subversion 中通过时间跟踪语句的方法。
但是,使用svn blame 查看文件中任何特定行的最后更改时间很简单。查看SVNBook:svn blame reference:
概要
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}'中可以得到1.和2.的组合
这可以分两个阶段完成:
svn blame /path/to/your/file > blame.tmpgrep "your_line_of_text" blame.tmp如果不需要,你可以在之后删除 blame.tmp 文件。
原则上,一个简单的脚本可以用任何大致相同的脚本语言编写。
【讨论】:
这里的关键是需要多少历史记录。正如其他人指出的那样,简短的回答是:svn blame(有关详细信息,请参阅svn help blame)。如果您要追溯历史或处理重大变化,您可能需要的不仅仅是这一条命令。
我只需要自己做这件事,并在 SO 上找到了这个(ye ole)线程。以下是我仅使用 CLI 解决它的方法,特别是针对我的 API 已更改的情况(例如,在将某人过时的工作(不在分支上,arrgh!)移植回基于最新主干的功能分支)。例如。函数名称已经发生了足够的变化,以至于不清楚需要调用哪个函数。
以下命令允许我浏览文件“fileName.h”中发生更改的提交并查看相应的修订号(注意:您可能需要根据您的svn 日志文本)。
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”的评论。
在Eclipse 中,您可以使用 SVN 注释视图了解您的代码的每一行何时提交,或者右键单击文件 → 团队 → 显示注释...。
【讨论】:
svn annotate
来自TortoiseSVN的AKA SVN Blame。
【讨论】:
svn blame 显示上次哪个签入修改了文件中的任何行。
这也适用于旧版本。
【讨论】:
开始是命令svn blame(或annotate,praise)。它将显示最后一次修改代码行的时间以及修改者。例如:
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
【讨论】:
如果你使用 Emacs,内置包 vc 可以做到这一点。
vc-annotate 或 C-xvg 运行命令 vc-annotate。李>
svn blame。vc-annotate-revision-previous-to-line) 将导航到您所在行的修订之前的修订。【讨论】:
您要查找的命令是svn blame。
【讨论】: