ファイル内に複数の連続した行からなるコードがあり、このコードに影響を与えた履歴内のすべてのコミットを見つけたいとします。Mercurialでこれを行う方法はありますか?
AFAIK Mercurial はこのためのコマンドを提供していないため、単一の組み込みコマンドを意味するものではありません。したがって、これにはおそらくいくつかのコマンドを含む小さなスクリプトが必要です。
ファイル内に複数の連続した行からなるコードがあり、このコードに影響を与えた履歴内のすべてのコミットを見つけたいとします。Mercurialでこれを行う方法はありますか?
AFAIK Mercurial はこのためのコマンドを提供していないため、単一の組み込みコマンドを意味するものではありません。したがって、これにはおそらくいくつかのコマンドを含む小さなスクリプトが必要です。
から始めたいと思うでしょうhg blame
。これにより、各行を変更した最新のリビジョンが得られます。-r
その後、オプションを使用しhg blame
て履歴をさかのぼることができます。
任意の数のテキスト処理プログラムからリビジョン番号を抽出し、blame
このプロセスを自動化できます。
履歴で文字列の不変部分がわかっている場合は、サイクル内の非難(および内部のロジック)の代わりに、hg grep --all ...
(PATTERNは通常のテキスト文字列だけでなく、正規表現にすることもできます)を試すことができます。
最も簡単なサンプル (ハードコードされたパターンの場合、正規表現を作成するのが面倒です)
>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');
(これは最も明白な出力ですよね?)