Annotate 可以让您看到对该行的最新更改,如果该更改是合并,那么我别无选择,只能浏览修订历史并找到下一次修改的时间。
我也试过hg grep -l '[contents of line]'
但是:
- a)我不知道如何定位特定文件(因此在中等大小的仓库中需要很长时间)
- b)它似乎只返回最后一个修订号
以下链接大致相似 - 如何找到修改了对函数的引用的所有变更集?
Annotate 可以让您看到对该行的最新更改,如果该更改是合并,那么我别无选择,只能浏览修订历史并找到下一次修改的时间。
我也试过hg grep -l '[contents of line]'
但是:
以下链接大致相似 - 如何找到修改了对函数的引用的所有变更集?
使用 Tortoisehg:
顶部面板允许您快速查看文件提交的历史记录,底部面板显示基于顶部面板中所选版本的注释文件。
在没有额外脚本的情况下使用 arielf 的响应:
UNIX:
命令:
hg log --template '{rev}\n' <FILE> |
xargs -I @ hg grep <PATTERN> -r @ <FILE>
您可以使用它为配置文件 (.hgrc) 添加别名:
[alias]
_grep_line_in_history = ! $HG log --template '{rev}\n' $2 |
xargs -I @ hg grep '$1' -r @ $2
视窗:
命令:
FOR /F "usebackq" %i IN (`hg log --template "{rev}\n" <FILE>`) DO
@(echo %i & hg grep <PATTERN> -r %i <FILE>)
别名:
[alias]
_grep_line_in_history = ! FOR /F "usebackq" %i IN
(`%HG% log --template "{rev}\n" "$2"`) DO @(echo %i & %HG% grep "$1" -r %i "$2")
我认为这需要一些(两步)编程。
下面的 shell 脚本对我来说效果很好。它打印修订和匹配的行。如果您只想要修订列表,您可以添加一个步骤以去除匹配的文本并仅保留修订前缀,并可能通过“sort -u”管道:
#!/bin/bash
#
# script to grep for a pattern in all revisions of a file
# Usage: scriptname 'pattern' filepath
#
function fatal() {
echo "$@" 1>&2
exit 1
}
function usage() {
echo "$@" 1>&2
fatal Usage: $0 pattern file
}
case "$1" in
'') usage 'missing pattern to search for' ;;
*) Pat="$1" ;;
esac
if [ "$2" != '' ]; then
File="$2"
else
usage 'must pass file as 2nd argument'
fi
# -- generate list of revisions (change-sets) involving $File
for rev in `hg log --template '{rev}\n' $File`; do
# -- grep the wanted pattern in that particular revision
hg grep "$Pat" -r $rev $File
done
笔记: