6

大量のファイルセットを別のJavaパッケージに移動するEclipseで、いくつかのリファクタリングを実行しました。これらの結果、参照を解決するために多くのファイルが自動的に更新されることがよくあります。したがって、これらの場合のコミットは非常に大きくなる傾向があります。

git log --followgitが名前の変更を追跡し、名前の変更まで履歴をたどることができると想定しましたが、gitは名前の変更を追跡しませんでした。

コミット時に名前変更検出されるEclipseで、より小さなリファクタリング操作を実行しました。唯一の違いは、コミットのサイズにあるようです。

何か案は?

4

1 に答える 1

7

Gitは履歴内の名前変更をまったく追跡しませんがgit log、コミットの内容に基づいて名前変更をヒューリスティックに検出できます。

  • 名前の変更を検出するには、に低い-Mパーセントを指定する必要がある場合があります。git logファイルの数パーセント以上が変更された場合、git log(およびgit diff)は追加/削除のペアを名前変更とは見なしません。移動するファイルが非常に小さく、コンテンツの変更(パッケージ名など)が必要な場合は、このしきい値を超える可能性があります。
  • -l評価する可能性のある名前変更の最大数を指定する値も指定する必要がある場合があります。大規模なコミットでは、これを超える可能性が非常に高いため、Gitは、ログ操作に時間がかかりすぎないように名前変更を評価しません。(名前変更の検出はO(n ^ 2)操作です。ここで、nは考慮する必要のある追加/削除ペアの数であるため、名前変更を探すログ操作で各コミットを処理するのにかかる時間は、順列を追加/削除します。)

これらのオプションの詳細については、git-logのマンページを参照してください。

于 2012-10-04T20:20:29.347 に答える