Попередження GIT: забагато файлів пропускає неточне виявлення перейменування


80

Я усвідомлюю, що за замовчуванням обмеження перейменування становить 100 і може збільшити це значення за допомогою конфігурації "diff.renamelimit config"

Мене турбує те, що якщо ця конфігурація не налаштована, чи буде неправильне злиття, відсутність коду? Намагаюся об’єднати (git merge) 2 гілки, що має величезні зміни.

Хтось може пролити більше інформації про це налаштування конфігурації?


У мене був такий самий досвід, і я можу підтвердити, що повідомлення - це просто попередження без наслідків, окрім кількох настирливих конфліктів злиття.
Йохан Х

У мене це попередження щодо команди diff
JobaDiniz 02

Відповіді:


53

Ваш вміст у безпеці.

Наскільки я розумію, gitнасправді не має жодної концепції першокласної renameоперації (лише bzrз великих 3 DVCS): mvце цукор поверх основного механізму, що в основному є addі a rm. Оскільки gitможе відстежувати вміст, який змінюється під час таких операцій, однак, він може використовувати евристику, щоб вгадати, коли a addта a rmнасправді є mv. Оскільки для цього потрібно більше роботи, ніж просто відображення того, що gitнасправді записано - документи, які git-diffпояснюють, що це "... вимагає часу обробки O (n ^ 2), де n - кількість потенційних цілей перейменування / копіювання" - gitне спробує коли задіяно занадто багато файлів. Параметр, який ви згадали, просто контролює цей поріг.


22
"Ваш вміст у безпеці" - хоча якщо виявлення пропускає файл, який було перейменовано з одного боку злиття та змінено з іншого, ви отримаєте конфлікти злиття, яких ви, можливо, не отримали, якби було виявлено перейменування. Об’єднання не буде помилковим , але для завершення може знадобитися більше зусиль користувача.
Cascabel

2
Дякую Хенку та Джефромі. Чи дійсно буде корисним налаштування цього "diff.renamelimit config" у будь-яких ситуаціях?
Senthil A Kumar

4
Якщо хтось теж цікавиться, чи корисний цей параметр: так, це може допомогти вам об'єднати гілки, коли в одній гілці ви перенесли сотні файлів, а в іншій ви внесли багато змін до цих файлів. У мене була така ситуація, коли у мене був величезний рефактор коду на одній гілці, а деякі постійні роботи над іншою.
корда

41

Якщо це комусь допомагає, у мене було багато файлів (сотні, якщо не тисячі) в одній гілці, яких ще не було в іншій. Біг

$ git config merge.renamelimit 15345

зробив помилку нижче при злитті

$ git merge master
.
.
.
warning: inexact rename detection was skipped due to too many files.
warning: you may want to set your merge.renamelimit variable to at least 15345 and retry the command.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.