2012-05-07 17 views
10

*.py diff=python.git/info/attributesに設定しました。だからGitは関数の境界を知っています。 git diff -Wは、関数全体が表示されていることを確認することさえできます。Git Diffを1つ以上の関数に制限しますか?

しかし、git diffの出力を特定の関数(または複数の関数)に限定する方法はありますか?

(...私はそれがawkのだと思う、それに失敗)

EDITこれもgit loggit rev-listのために有用であろう:すべてのは、それがviews.pyを修正コミットを見せていない、私はそれを修正するコミットを示しその中の特定の機能。 (理想的な世界では、views.pyは2000人の巨大獣ではなく、8人の異なる開発者によって頻繁に変更されます...)

+1

これは価値があるかもしれません:http://stackoverflow.com/questions/523307/semantic-diff-utilities – JosefAssad

+0

はい面白いですが、それはかなり未成熟のフィールドのように見えます。 –

答えて

2

[OK] Bireiのおかげで、私たちは解決策を得ました。

はbashのビットと組み合わせて、その答えにawkスクリプトを使用します。

~/scripts/grit:

#!/bin/bash 
cmd=$1 
shift 1 
if [ "$cmd" = "" ]; then 
    git 
# other commands not relevant to this question go here 
elif [ $cmd = "funcdiff" ]; then 
    git show "$1:$3" | awk -f ~/scripts/getfunc.awk -v f=$4 > /tmp/.tmp1 
    git show "$2:$3" | awk -f ~/scripts/getfunc.awk -v f=$4 > /tmp/.tmp2 
    git diff -W --no-index /tmp/.tmp1 /tmp/.tmp2 

else 
    git $cmd [email protected] 
fi 

使用例:grit funcdiff 009e75 8b7a14 ./staging.py write_uploaded

をこれも〜でGitの別名として追加することができ/.gitconfig

1

私は--function-contextまたはその-Wオプション)を使用して、diff出力を単一の関数に制限することができます。

とにも-Wオプションは、このblog postに示すように、「機能」は、言語から言語に大きく異なりますことを知って、常に十分ではないこと:

私は、このオプションはかなり信頼できないことがわかりました、少なくとも大規模なPHPクラスの中で。
私のテストでは、--function-contextがほとんどの場合、元のファイルのほとんどを表示し、gitはPHPの関数境界を知らないように見えます。
変更前と変更後のコンテキスト行の数はランダムに見えますが、diffは必ずしも関数のすべての行を必ずしも表示するとは限りません。

この変更を導入しoriginal patch message

は、いくつかの光を当てる:

この実装は、明示的に関数の最後を見つけるための方法がないこと、すなわち、grepの内の1つのと同じ欠点を持っています。
これは、数行の余分なコンテキストが表示され、次の認識された関数までが始まることを意味します。

だから、gitでは関数の境界を検出するのは難しいようです。
この例では、gitは関数境界を検出せず、ファイル全体のコンテキストを返します。


OP Steve Bennettが指摘するように、潜在的な解決策は、それらの2「TEMP」ファイルで差分するために、変更前後のリビジョンで機能を抽出なるGitの別名を定義することであろう。
"Creating Git Aliases"と "Bash script to select a single Python function from a file"の例。

これは、彼のレポでOPが動作する特定の種類のソースを解析することができるアドホックなソリューションです。

+0

ええ、私は今、別のタックを試しています。gitエイリアスを使ってファイルを解析しています:http://stackoverflow.com/questions/10512351/bash-script-to-select-a-single-python-function- from-a-file 私は完全にランダムに遭遇したこの記事に触発されました:http://davidwalsh.name/git-aliases –

+0

@SteveBennett面白いアプローチ。私はそれを可視性の向上のための答えに含め、このアドホックな解決法と、より「一般的な」特徴の欠如とを対比させました。 – VonC

関連する問題