使用すると、git gui blame
スクリプトでの使用を行うことは困難である、としながらgit log -G
およびgit log --pickaxe
メソッドの定義が現れたり消えたときにそれぞれがお見せすることができ、私は彼らがに行われたすべての変更リストにするどのような方法発見していない体あなたの方法のを。
ただし、gitattributes
およびtextconv
プロパティを使用して、まさにそれを行うソリューションを組み合わせることができます。これらの機能は元々バイナリファイルの操作を支援するためのものでしたが、ここでも同様に機能します。
重要なのは、Gifで、diff操作を行う前に、関心のある行を除くすべての行をファイルから削除することです。するとgit log
、git diff
などあなたが興味を持っている領域のみが表示されます。
これが私が別の言語で行うことの概要です。必要に応じて調整できます。
1つの引数(ソースファイルの名前)を取り、そのファイルの重要な部分のみを出力する(または興味深いファイルがない場合は何も出力しない)短いシェルスクリプト(または他のプログラム)を記述します。たとえば、sed
次のように使用できます。
#!/bin/sh
sed -n -e '/^int my_func(/,/^}/ p' "$1"
textconv
新しいスクリプトのGit フィルターを定義します。(詳細については、gitattributes
manページを参照してください。)フィルターの名前とコマンドの場所は、任意の名前にすることができます。
$ git config diff.my_filter.textconv /path/to/my_script
問題のファイルの差分を計算する前に、そのフィルターを使用するようにGitに指示します。
$ echo "my_file diff=my_filter" >> .gitattributes
ここで-G.
(に注意.
)を使用して、フィルターが適用されたときに目に見える変更を生成するすべてのコミットを一覧表示すると、関心のあるコミットが正確に得られます。など、Gitのdiffルーチンを使用する他のオプション--patch
は、この制限されたビューも取得します。
$ git log -G. --patch my_file
ほら!
フィルタースクリプトで最初の引数としてメソッド名(および2番目の引数としてファイル)を取ることは、1つの便利な改善点です。これによりgit config
、スクリプトを編集する必要がなく、を呼び出すだけで目的の新しいメソッドを指定できます。たとえば、次のように言うことができます。
$ git config diff.my_filter.textconv "/path/to/my_command other_func"
もちろん、フィルタースクリプトは、好きなことを実行したり、引数を追加したり、何でも実行できます。ここで示したものをはるかに超える柔軟性があります。