2013-03-13 60 views
6

注释让您尽可能地看到该行的最近更改,如果该更改是合并,那么我别无选择,只能浏览修订历史记录并找到下次它被修改。Mercurial - 查看修改文件中特定行的所有变更集

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

  • 一)我无法弄清楚如何针对特定的文件(所以它永远在一个中等大小的回购)
  • B)这似乎只返回最后一个版本号

以下链接隐晦地相似 - How to find all changsets where a reference to a function was modified?

回答

8

使用Tortoisehg:

  1. 查看 - >清单
  2. 右键单击文件感兴趣,然后单击“文件历史记录”
  3. 点击

顶部面板使您能够快速查看历史“与修订版本号注解”根据提交文件,底部面板显示基于顶部面板中所选版本的带注释文件。

+1

也许这是因为我在更高版本的TortoiseHg(3.2.3)上,但我不明白这是如何帮助隔离单个行的更改? (我再也找不到清单选项,但是从资源管理器/插件上下文菜单中注释文件的行为似乎是做了这个答案的建议,这就是文件如何看待各种修订;您仍然必须找到行在每个修订中的问题。) – downwitch 2015-10-08 22:03:57

+1

失踪清单 - http://stackoverflow.com/questions/23457746/manifest-button-missing-in-tortoise-hg – Tom 2015-10-09 16:12:33

1

我觉得这个热曲需要一些(两步)编程。

下面的shell脚本对我来说工作得很好。它将打印修订版本和匹配行。如果你只是想修订列表,你可以添加一个步骤剥离匹配的文本,只留下修改的前缀,并且可能通过管道“排序-u”:

#!/bin/bash 
# 
# script to grep for a pattern in all revisions of a file 
# Usage: scriptname 'pattern' filepath 
# 
function fatal() { 
    echo "[email protected]" 1>&2 
    exit 1 
} 

function usage() { 
    echo "[email protected]" 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 

注:

  • 不完全万无一失(例如,在模式引号)
  • 我不检查文件的存在,以支持重命名/删除文件以及
+0

希望有一种方法可以以更简单的方式实现此目的。我不使用TortoiseHg – ganeshran 2013-06-19 11:53:13

2

使用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 
    

WINDOWS:

  • 命令:

    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") 
    
相关问题