git log -G<regex> -p
指定されたパターンに一致する変更をコードベースの履歴で検索するための素晴らしいツールです。ただし、ほとんど無関係なハンクの海で、diff / patch出力で関連するハンクを見つけるのは圧倒的です。
もちろんgit log
、元の文字列/正規表現の出力を検索することは可能ですが、それは視覚的なノイズと多くの無関係な変更の気を散らすものを減らすのにほとんど役立ちません。
を読むとgit log
、があります--pickaxe-all
。これは、私が望むものとは正反対です。出力を(チェンジセット全体に)広げる一方で、(特定の塊に)制限したいのです。
基本的に、私は差分/パッチを個々のハンクに「インテリジェントに」解析し、各ハンクに対して検索を実行し(変更された行のみを対象とする)、一致しないハンクを破棄し、それらを出力する方法を探していますそうする。
説明したようなツールは存在しますか?マッチした/影響を受けたハンクを取得するためのより良いアプローチはありますか?
私がやったいくつかの初期調査...
grep
diff / patchの出力が可能で、コンテキストオプションの値を動的にすると(たとえば、行数ではなく正規表現を使用して)十分な場合があります。しかしgrep
、そのように正確に構築されているわけではありません(また、必ずしもその機能を要求しているわけでもありません)。patchutilsスイートを見つけましたが、当初は自分のニーズに合っているように聞こえました。しかし、その
man
ページを読んだ後、ツールは正規表現に基づいて一致するハンクを処理していないようです。(ただし、ハンクのリストを受け入れることができます...)私はついにsplitpatch.rbに出会いました。これはパッチの解析をうまく処理しているようですが、経由
stdin
でパッチの読み込みを処理するために大幅に増強する必要があります。