7

1 つにはアクティブな git リポジトリがあり、もう 1 つには git 履歴がない場合に、2 つのソース間の最適な一致を見つけることについて以前に提起した質問の一部として、最も近い git commit を見つけるための perl スクリプトを作成しました

どのブランチを使用するかを推測する必要がないように、スクリプトを書き直しているところですが、すべてのブランチで実行されて最も近いものが見つかり、最適なブランチでの最適なコミットが示されます。残念ながら、私が使用している測定値は、「近さ」の最良の判断ではない可能性があります。

現在、diff -burN -x.git my_git_subtree my_src_subtree | wc -lコード ツリーがどれだけ近いかを判断するために使用しています。これは多かれ少なかれ機能しているように見えますが、別のブランチに存在する可能性が高い、または存在しない可能性のあるフォルダー全体が追加または欠落している場合に遭遇します。

ソースがどれだけ近いかを判断するより良い方法はありますか? ディレクトリ構造を比較するもの、おそらく何行異なるかを想像しています。さまざまなパラメーターを に渡すだけの問題diffかもしれませんし、そのようなことを行う別のツールがあるかもしれません。

4

1 に答える 1

3

測定を改善するために、'git diff --shortstat'を試してみませんか?出力は次のようになります。

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

結果に応じて、ファイルの変更/挿入/削除に優先順位を付ける方法を試すことができます。

あなたのperlを見ると、おそらくコミット間の「近さ」の順序について推測することはできないと思います。コミットごとにブルートフォースチェックを行うか、少なくともそのオプションを選択する必要があるかもしれません。

また、最も近いものを探す代わりに、(コミット、「近さ」)ペアのソートされたリストを保持し、おそらく上位のいくつかを表示して手作業で確認することをお勧めします。以下で説明するように、変更の数を確認するだけで2つのコードセットが近いかどうかを判断する特効薬はありません。とは言うものの、変更の数は間違いなくあなたがレビューすべきリストを絞り込むのに役立ちます...

更新: git diffを使用するもう1つの利点は、コミットごとにハードリセットを実行する必要がないことです。不明なツリー(git履歴のあるツリー)から.git /ディレクトリをシンボリックリンクし、git reset [--mixed]を使用すると、現在のヘッドポインターが更新されますが、ソースは変更されません(明らかに不明なツリーをバックアップする必要があります)。このメソッドを使用する前のソースツリー)。

于 2013-02-18T17:02:51.027 に答える