In der Dokumentation wird 0 nicht als Sonderwert für erwähnt diff.renamelimit
.
Daher sollten Sie diese Grenze auf den empfohlenen Wert setzen.
Oder Sie können versuchen, die Umbenennungserkennung vollständig zu deaktivieren. ( git config diff.renames 0
)
Ein ähnliches Beispiel finden Sie in diesem Blog-Beitrag " Confluence, git, rename, merge oh my ... ":
Wie bereits erwähnt, versucht git, nach dieser Tatsache das Umbenennen von Dateien zu erkennen, beispielsweise bei Verwendung von git log
oder git diff/merge
.
Beim Versuch, Umbenennungen zu erkennen, unterscheidet git zwischen exakten und ungenauen Umbenennungen, wobei die erstere eine Umbenennung ist, ohne den Inhalt der Datei zu ändern, und die letztere eine Umbenennung, die möglicherweise Änderungen am Inhalt der Datei enthält (z. B. Umbenennen / Verschieben einer Java-Klasse).
Diese Unterscheidung ist wichtig, da der Algorithmus zum Erkennen exakter Umbenennungen linear ist und immer ausgeführt wird, während der Algorithmus zum Erkennen ungenauer Umbenennungen quadratisch ist ( O(n^2)
) und git dies nicht versucht, wenn die Anzahl der geänderten Dateien einen bestimmten Schwellenwert überschreitet (1000 mal) Standard).
Da die Anzahl der von der letzten Reorganisation betroffenen Dateien diesen Schwellenwert überschreitet, gibt git einfach auf und überlässt die Zusammenführungsauflösung dem Entwickler. In unserem Fall können wir eine manuelle Zusammenführungsauflösung vermeiden, indem wir den Schwellenwert ändern
Hinweis: Git 2.16 (Q1 2018) wird diese Grenze ändern:
In der Vergangenheit hatte die Diff-Maschinerie zur Erkennung von Umbenennungen eine fest codierte Grenze von 32.000 Pfaden. Dies wird aufgehoben, um Benutzern Handelszyklen mit einem (möglicherweise) besser lesbaren Ergebnis zu ermöglichen.
Siehe Commit 8997355 (29. November 2017) von Jonathan Tan ( jhowtan
) .
Siehe Commit 9268cf4 , Commit 9f7e4bf , Commit d6861d0 , Commit b520abf (13. November 2017) von Elijah Newren ( newren
) .
(Zusammengeführt von Junio C Hamano - gitster
- in Commit 6466854 , 19. Dezember 2017)
diff
: Entfernen Sie die leise Klemme von renameLimit
In Commit 0024a54 (Fix the Rename Detection Limit Checking; Sept. 2007, Git v1.5.3.2) wurde das renameLimit
auf 32767 geklemmt.
Dies scheint darin bestanden zu haben, einen ganzzahligen Überlauf bei der folgenden Berechnung einfach zu vermeiden:
num_create * num_src <= rename_limit * rename_limit
Obwohl es auch als fest codierte Grenze für die CPU-Zeit angesehen werden kann, sind wir bereit, Benutzern zu erlauben, git anzuweisen, für die Bearbeitung von Umbenennungen aufzuwenden.
Eine Obergrenze mag sinnvoll sein, aber leider wurde diese Obergrenze weder den Benutzern mitgeteilt noch irgendwo dokumentiert.
Obwohl große Limits die Dinge verlangsamen können, haben wir Benutzer, die begeistert wären, wenn eine kleine Änderung von fünf Dateien korrekt ausgewählt würde, selbst wenn sie manuell ein großes Limit angeben und zehn Minuten warten müssen, bis die Umbenennungen erkannt werden.
Bestehende Skripte und Tools, die " -l0
" verwenden, um weiterzuarbeiten, wobei 0 als spezieller Wert behandelt wird, der angibt, dass das Umbenennungslimit eine sehr große Zahl sein soll.
Git 2.17 (Q2 2018) verhindert, dass eine Warnmeldung in der Mitte einer Zeile " git diff
" angezeigt wird.
Siehe Commit 4e056c9 (16. Januar 2018) von Nguyễn Thái Ngọc Duy ( pclouds
) .
(Zusammengeführt von Junio C Hamano - gitster
- in Commit 17c8e0b , 13. Februar 2018)
diff.c
: stdout
Vor dem Drucken spülen. Warnungen umbenennen
Die Diff-Ausgabe wird in einem FILE
Objekt gepuffert und kann beim Drucken dieser Warnungen (direkt an fd 2
) noch teilweise gepuffert werden .
Die Ausgabe ist so durcheinander
worktree.c | 138 +-
worktree.h warning: inexact rename detection was skipped due to too many files.
| 12 +-
wrapper.c | 83 +-
Es wird schlimmer, wenn die Warnung gedruckt wird, nachdem die Farbcodes für das Diagrammteil bereits gedruckt wurden. Sie erhalten eine Warnung in grün oder rot.
Spülen Sie zuerst stdout, damit wir stattdessen so etwas bekommen können:
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
stattdiff.renameLimit
?