Подтвердить что ты не робот

Предупреждение о "diff.renamelimit variable" при нажатии git push

Я нажимаю локальную фиксацию на удаленный сервер git и получаю следующие предупреждающие сообщения:

remote: warning: only found copies from modified paths due to too many files.
remote: warning: you may want to set your diff.renamelimit variable to at least 19824 and retry the command.

Но на самом деле я уже установил diff.renamelimit в 0 (я думаю, что нуль означает неограниченный, верно?).

$ git config --list
...
diff.renamelimit=0

Итак, что мне делать, чтобы избежать этого предупреждения? Спасибо.

4b9b3361

Ответ 1

документация не упоминает 0 как специальное значение для diff.renamelimit.
Поэтому вы должны установить этот предел на рекомендованное значение.
Или вы можете попробовать дезактивировать обнаружение переименования вообще. (git config diff.renames 0)

В этом блоге вы найдете аналогичный пример: Confluence, git, rename, merge oh my...":

Как уже упоминалось, git пытается обнаружить переименование файлов после этого факта, например, при использовании git log или git diff/merge.
При попытке обнаружить переименования git различает точные и неточные имена переименований, причем первый из них является переименованием без изменения содержимого файла, а второй - переименованием, которое может включать в себя изменения в содержимом файла (например, переименование/перемещение класса Java).
Это различие важно, потому что алгоритм обнаружения точных переименований является линейным и всегда будет выполняться, если алгоритм определения неточного имени переименования квадратичен (O(n^2)) и git не пытается сделать это, если количество измененных файлов превышает определенный порог (по умолчанию 1000).

Поскольку количество файлов, затронутых недавней реорганизацией, превышает этот порог, git просто отбрасывает и оставляет разрешение слияния до разработчика. В нашем случае мы можем избежать ручного разрешения слияния, хотя, изменив порог


Примечание: git 2.16 (Q1 2018) изменит этот предел:

Исторически сложилось, что механизм дифференциации для обнаружения переименования имел жестко закодированный предел 32k путей; это снимается, чтобы пользователи торговых циклов с (возможно) более легким для чтения результатом.

См. commit 8997355 (29 ноября 2017 г.) Джонатан Тан (jhowtan).
См. commit 9268cf4, совершить 9f7e4bf, commit d6861d0, совершить b520abf (13 ноября 2017 г.) Илия Ньюрен (newren).
(объединено Junio ​​C Hamano - gitster - в совершить 6466854, 19 декабря 2017 г.

diff: удалить тихий зажим renameLimit

В commit 0024a54 (Исправьте проверку ограничения переименования, сентябрь 2007 г., git v1.5.3.2), renameLimit был зажат до 32767.
По-видимому, это было просто, чтобы избежать целочисленного переполнения при следующем вычислении:

num_create * num_src <= rename_limit * rename_limit

Хотя это также можно рассматривать как жестко привязанную к количеству CPU время, которое мы готовы разрешить пользователям сообщать git, чтобы тратить на обработку переименовывает.
Верхняя граница может иметь смысл, но, к сожалению, эта верхняя связанный ни с кем не сообщается пользователям и нигде не документируется.

Хотя большие ограничения могут замедлить работу, у нас есть пользователи, которые будут ecstatic, чтобы иметь небольшое пять изменений файла, правильно вишня выбрана даже если им нужно вручную указать большой предел и подождать десять минут для переименования, которые будут обнаружены.

Существующие скрипты и инструменты, которые используют "-l0", продолжают работать, обрабатывая 0 как специальное значение, указывающее, что предел переименования должен быть очень большим.

Ответ 2

git config merge.renameLimit 999999

Что означает merge.renameLimit означает

Количество файлов, которые необходимо учитывать при выполнении определения переименования во время слияния; если не указано, значение по умолчанию diff.renameLimit.

источник: https://git-scm.com/docs/git-merge