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

时间:2013-03-13 22:04:57

标签: mercurial tortoisehg

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

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

  • a)我无法弄清楚如何定位特定文件(所以它需要一个中等大小的回购)
  • b)似乎只返回最后一个修订号

以下链接含糊不清 - How to find all changsets where a reference to a function was modified?

2 个答案:

答案 0 :(得分:8)

使用Tortoisehg:

  1. 查看 - >清单
  2. 右键单击感兴趣的文件,然后单击“文件历史记录”
  3. 点击“使用修订号注释”
  4. 顶部面板允许您根据提交快速查看文件的历史记录,底部面板根据顶部面板中的选定版本显示带注释的文件。

答案 1 :(得分: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

注意:

  • 并非完全万无一失(例如图案中的引号)
  • 我不检查文件是否存在以支持重命名/删除的文件