显示Mercurial提交修改一段代码(多行)

时间:2014-11-05 10:01:37

标签: version-control mercurial revision-history

假设我有一段代码由一个文件中的几个连续行组成,我想查找历史记录中影响这段代码的所有提交。有没有办法用mercurial做到这一点?

我不是指单个内置命令,因为AFAIK Mercurial没有为此提供命令,所以这可能需要一个涉及多个命令的小脚本。

2 个答案:

答案 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');

(这是最明显的输出,不是吗?)