2013-02-05 4 views
7

私が以前投稿したfinding the best match between two sourcesの質問の1つとして、アクティブなgit repoがあり、もう一方にgitの履歴がない場合は、a perl script to find the closest git commitと書きました。大きなソースツリーの「親密度」を測定する

私はスクリプトを書き直しているので、使用するブランチを推測する必要はありませんが、すべてのブランチで実行されて最も近いものを見つけて、最も良いコミットを教えてくれます最高の支店。残念ながら、私が使用している測定値が「近さ」の最高の判断基準ではないかもしれないことがわかりました。

現在、私はdiff -burN -x.git my_git_subtree my_src_subtree | wc -lを使用して、コードツリーがどれくらい近いかを判断します。これは多かれ少なかれ動作するようですが、フォルダ全体が追加されたり見つからなかったり、存在したり、別のブランチに存在しない場合があります。

ソースがどれくらい近いかを判断する良い方法はありますか?私はディレクトリ構造を比較する何かを想定しています。おそらく同様にいくつの行が異なっているのでしょうか。それはちょうどdiffに異なるパラメータを渡す問題かもしれません、または多分そこのような何かを行う別のツールがあります。

+4

プログラムの「親密度」を測定する方法はありません。 「if(〜x)explode」は、「if(x)explode」(1文字)とはわずかに異なる1つの尺度であるが、これらの2つのプログラムの結果は根本的に異なる。誰もがあなたが提案するどんな対策にも反対します。私はあなたがセットを選んで、フラックと一緒に暮らすことをお勧めします。嫌いな人は、より良い答えを実装することを歓迎することができます。 –

答えて

3

測定を改善するには、 'git diff --shortstat'を試してみてください。出力は次のようになります。

1 file changed, 1 insertion(+), 2 deletions(-) 

結果に応じて、ファイルの変更/挿入/削除に優先順位を付ける方法を説明します。

あなたのperlを見ると、おそらくコミット間の "近さ"の順序について仮定することはできないだろうと思います。コミットする度に力をチェックする必要があるかもしれません。オプション。

私はまた、最も近いものを探す代わりに、(コミット、「親密さ」)ペアの並べ替えられたリストを保持し、おそらく上位のいくつかを表示し、それらを手で見直すことを提案します。以下に述べるように、変更の数を見るだけで、2つのコードセットが近いかどうかを判断するための銀色の弾丸はありません。それは言った、変更の数は間違いなく、あなたが見直すべきリストを絞り込むことができます...

UPDATE:私はまた、Gitの差分を使用してのもう一つの利点は、あなたがハードを実行する必要がないことであることを言及する必要がありますコミットごとにリセットします。あなたの未知のツリー(gitの履歴なし)から.git /ディレクトリをシンプルにシンボリックリンクし、git reset [--mixed]を使うと、現在のヘッドポインタは更新されますが、ソースは変更されません。このメソッドを使用する前にソースツリーを参照)。

関連する問題