Есть ли какие-либо недостатки для включения git rerere?


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

4 83

4 ответа:

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

git rerere forget <pathspec>

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

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

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

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

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

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

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

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

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