6

Annotate 可以让您看到对该行的最新更改,如果该更改是合并,那么我别无选择,只能浏览修订历史并找到下一次修改的时间。

我也试过hg grep -l '[contents of line]'但是:

  • a)我不知道如何定位特定文件(因此在中等大小的仓库中需要很长时间)
  • b)它似乎只返回最后一个修订号

以下链接大致相似 - 如何找到修改了对函数的引用的所有变更集?

4

3 回答 3

9

使用 Tortoisehg:

  1. 查看 -> 清单
  2. 右键单击感兴趣的文件,然后单击“文件历史记录”
  3. 单击“使用修订号注释”

顶部面板允许您快速查看文件提交的历史记录,底部面板显示基于顶部面板中所选版本的注释文件。

于 2013-03-14T02:05:42.957 回答
3

在没有额外脚本的情况下使用 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")
    
于 2015-12-21T12:59:44.247 回答
1

我认为这需要一些(两步)编程。

下面的 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

笔记:

  • 并非完全万无一失(例如模式中的引号)
  • 我也不检查文件是否存在以支持重命名/删除的文件
于 2013-03-13T22:42:19.753 回答