假设我有一段代码由一个文件中的几个连续行组成,我想查找历史记录中影响这段代码的所有提交。有没有办法用mercurial做到这一点?
我不是指单个内置命令,因为AFAIK Mercurial没有为此提供命令,所以这可能需要一个涉及多个命令的小脚本。
答案 0 :(得分:1)
您可能希望从hg blame
开始。这将为您提供最新修改,改变每一行。然后,您可以使用-r
选项hg blame
向后浏览历史记录。
任意数量的文本处理程序都可以从blame
中提取修订号,并自动完成此过程。
答案 1 :(得分:0)
如果您知道历史记录中字符串的任何不可变部分,您可以尝试,而不是循环中的责备(以及内部的一些逻辑),使用hg grep --all ...
(PATTERN可以是regexp,而不仅仅是普通文本-string)。
最简单的样本(对于硬编码模式,我懒得构建任何正则表达式)
>hg grep --all DATE_FORMAT_ENTRY serendipity_lang_ru.inc.php
lang/UTF-8/serendipity_lang_ru.inc.php:9:-:@define('DATE_FORMAT_ENTRY', '%A, %e %B. %Y');
lang/UTF-8/serendipity_lang_ru.inc.php:9:+:@define('DATE_FORMAT_ENTRY', '%A, %e %B %Y');
lang/UTF-8/serendipity_lang_ru.inc.php:7:-:@define('DATE_FORMAT_ENTRY', '%A, %e %B %Y');
lang/UTF-8/serendipity_lang_ru.inc.php:7:+:@define('DATE_FORMAT_ENTRY', '%A, %e %B. %Y');
lang/UTF-8/serendipity_lang_ru.inc.php:3:-:@define('DATE_FORMAT_ENTRY', '%A, %e %B. %Y');
lang/UTF-8/serendipity_lang_ru.inc.php:3:+:@define('DATE_FORMAT_ENTRY', '%A, %e %B %Y');
lang/UTF-8/serendipity_lang_ru.inc.php:0:+:@define('DATE_FORMAT_ENTRY', '%A, %e %B. %Y');
(这是最明显的输出,不是吗?)