Есть ли минусы для включения git rerere?

Я читал разные вещи о функции grerererere и собираюсь включить ее. Но я не видел, чтобы кто-нибудь упоминал о возможных проблемах, которые могут возникнуть при его использовании. Я должен предположить, что есть недостаток, или он, вероятно, будет включен по умолчанию. Так есть ли минусы для включения rerere? Какие потенциальные проблемы это может вызвать, что иначе не произошло бы?

4 ответа

Решение

Если вы сделаете слияние неправильно, затем откажитесь от него, затем сделайте "то же самое" слияние снова, оно снова будет неправильным. Вы можете забыть записанное разрешение, хотя. Из документации:

git rerere forget <pathspec>

Это сбрасывает разрешения конфликтов, которые были повторно записаны для текущего конфликта в <pathspec>,

Будьте осторожны, чтобы использовать его на определенных путях; Вы не хотите, чтобы все ваши записанные разрешения были уничтожены. (forget без аргументов устарел, чтобы спасти вас от этого, если вы не введете git rerere forget . явно запросить это.)

Но если вы не думаете об этом, вы можете легко вложить это неверное слияние в вашу историю...

Как упоминает Х.К. Хамано в своей статье " Веселье с rerere"

  • Rerere помнит, как вы решили разрешить конфликтующие регионы;
  • Rerere также помнит, как вы подправляли вне конфликтующих областей, чтобы приспособиться к семантическим изменениям;
  • Rerere может повторно использовать предыдущее разрешение, даже если вы объединяли две ветви с содержимым, отличным от того, которое вы разрешили ранее.

Даже люди, которые давно использовали rerere, часто не замечают последнего пункта.

Так что, если вы активируете rerere на слишком широком контенте вы можете столкнуться с неожиданным или запутанным разрешением слияния из-за последнего пункта.

У меня есть возможность rerere глобально. Я действительно не заметил никаких проблем, и обычно это облегчает мою жизнь.

Я выбрал коммит (в gitk), который содержал только двоичный файл. Cherrypick потерпел неудачу из-за конфликта (который приходит к выводу об этом естественно), и я решил конфликт, оставив вишневый кир. Позже я был удивлен, обнаружив в другой перебазированной ветке, что мои dll не вели себя - только обнаружив, что они не были перенесены в перебазирование как (я полагаю) автоматическое разрешение конфликтов. Так что это единственный случай (когда я включил rerere), когда я столкнулся с нелогичным (хотя я уверен, что он абсолютно последовательным) поведением.

Другие вопросы по тегам