ドキュメントはのための特別な値として0を言及していませんdiff.renamelimit
。
したがって、その制限を推奨値に設定する必要があります。
または、名前変更検出を完全に無効にしてみてください。(git config diff.renames 0
)
このブログ投稿「Confluence、git、rename、merge oh my ...」にも同様の例があります:
すでに述べたように、gitは、たとえば、git log
またはを使用している場合など、その事後にファイル名の変更を検出しようとしますgit diff/merge
。
名前の変更を検出しようとすると、gitは正確な名前と不正確な名前を区別します。前者はファイルの内容を変更しない名前変更であり、後者はファイルの内容の変更(Javaクラスの名前変更/移動など)を含む可能性のある名前変更です。
正確な名前変更を検出するアルゴリズムは線形であり、不正確な名前変更検出のアルゴリズムが2次(O(n^2)
)である間は常に実行され、変更されたファイルの数が特定のしきい値(1000 byデフォルト)。
最近の再編成の影響を受けるファイルの数がこのしきい値を超えると、gitは単にあきらめて、マージの解決を開発者に任せます。私たちの場合、しきい値を変更することで、手動のマージ解決を回避できます。
注:Git 2.16(2018年第1四半期)はその制限を修正します:
歴史的に、名前変更検出用の差分機構には、ハードコードされた32kパスの制限がありました。これは、ユーザーが(おそらく)読みやすい結果でサイクルを交換できるようにするために解除されています。
Jonathan Tan()によるcommit 8997355(2017年11月29日)を参照してください。Elijah Newren()によるcommit 9268cf4、commit 9f7e4bf、commit d6861d0、commit b520abf(2017年11月13日)を
参照してください。(合併によりJunio C浜野- -で6466854コミット、2017年12月19日)をjhowtan
newren
gitster
diff
:のサイレントクランプを取り外します renameLimit
で0024a54をコミット(名前変更検出限界チェック修正、2007年9月、Gitのv1.5.3.2)、renameLimit
32767に固定した
だけで、次の計算でオーバーフロー整数避けるために行ったことがあるし、この表示されました:
num_create * num_src <= rename_limit * rename_limit
また、CPU時間のハードコードされた制限と見なすこともできますが、ユーザーが名前の変更の処理に費やすようにgitに指示できるようにします。
上限は理にかなっているかもしれませんが、残念ながら、この上限はユーザーに伝達されておらず、どこにも文書化されていません。
制限を大きくすると処理が遅くなる可能性がありますが、手動で大きな制限を指定して名前の変更が検出されるまで10分間待つ必要がある場合でも、5つの小さなファイルの変更を正しく選択することに夢中になっているユーザーがいます。
「-l0
」を使用して作業を続行する既存のスクリプトとツール。0を特別な値として扱い、名前変更の制限が非常に大きいことを示します。
Git 2.17(2018年第2四半期)git diff
では、「」出力の行の途中に警告メッセージが表示されなくなります。
参照してください4e056c9コミットにより(2018年1月16日)のグエンタイ・ゴックDuyと(pclouds
)。
(合併によりJunio C浜野- gitster
-で17c8e0bコミット2018年2月13日)
diff.c
:stdout
名前変更の警告を印刷する前にフラッシュする
差分出力はFILE
オブジェクトにバッファリングされ、これらの警告を(に直接fd 2
)出力するときに部分的にバッファリングされる可能性があります。
出力はこのように台無しになります
worktree.c | 138 +-
worktree.h warning: inexact rename detection was skipped due to too many files.
| 12 +-
wrapper.c | 83 +-
グラフ部分のカラーコードがすでに印刷されている後に警告が印刷されると、さらに悪化します。緑または赤の警告が表示されます。
最初にstdoutをフラッシュして、代わりに次のようなものを取得できるようにします。
xdiff/xutils.c | 42 +-
xdiff/xutils.h | 4 +-
1033 files changed, 150824 insertions(+), 69395 deletions(-)
warning: inexact rename detection was skipped due to too many files.
merge.renameLimit
代わりにdiff.renameLimit
?