Mercurial-查看修改文件中特定行的所有变更集

Mercurial-查看修改文件中特定行的所有变更集,mercurial,tortoisehg,Mercurial,Tortoisehg,Annotate可以让您看到该行最近的更改,如果该更改是合并,那么我别无选择,只能浏览修订历史记录并查找下一次修改 我也尝试过hg grep-l'[contents of line]',但是: a) 我不知道如何针对特定的文件(因此,在中等规模的回购协议中需要花费很长时间) b) 它似乎只返回最后的修订号 下面的链接大致相似- 我认为这需要一点(两步)编程 下面的shell脚本对我来说非常有效。它同时打印修订和匹配行。如果您只需要修订列表,可以添加一个步骤来去除匹配文本,只保留修订前缀,并可

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

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

  • a) 我不知道如何针对特定的文件(因此,在中等规模的回购协议中需要花费很长时间)
  • b) 它似乎只返回最后的修订号
下面的链接大致相似-
我认为这需要一点(两步)编程

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

  • 不完全可靠(例如模式中的引号)
  • 我不检查文件是否存在以支持重命名/删除的文件
    • 使用乌龟:

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

    • 顶部面板允许您根据提交快速查看文件的历史记录,底部面板根据顶部面板中选定的版本显示带注释的文件。

      使用arielf的响应,无需额外脚本:

      UNIX:

      • 命令:

          hg log --template '{rev}\n' <FILE> | 
               xargs -I @ hg grep <PATTERN> -r @ <FILE>
        
          FOR /F "usebackq" %i IN (`hg log --template "{rev}\n" <FILE>`) DO
          @(echo %i & hg grep <PATTERN> -r %i <FILE>)
        
      窗口:

      • 命令:

          hg log --template '{rev}\n' <FILE> | 
               xargs -I @ hg grep <PATTERN> -r @ <FILE>
        
          FOR /F "usebackq" %i IN (`hg log --template "{rev}\n" <FILE>`) DO
          @(echo %i & hg grep <PATTERN> -r %i <FILE>)
        

      希望有一种更简单的方法来实现这一点。我不使用TortoiseHgma,因为我使用的是更高版本的TortoiseHg(3.2.3),但我不知道这有助于隔离单行的变化?(我再也找不到manifest选项了,但是explorer/plugin上下文菜单中的annotate files行为似乎符合这个答案的建议,这正是文件查看各种修订的方式;您仍然需要在每个修订中找到有问题的行。)对于缺少的manifest-