Есть ли какие-либо недостатки для включения git rerere?
Я читал разные вещи о функции rerere git, и я рассматриваю возможность ее включения. Но я не видел, чтобы кто-нибудь упоминал о возможных проблемах, которые могут возникнуть при его использовании. Я должен предположить, что есть недостаток, или он, вероятно, будет включен по умолчанию. Итак, есть ли какой-либо недостаток в том, чтобы включить rerere? Какие потенциальные проблемы это может вызвать, что бы не произошло в противном случае?
4 ответа:
если вы делаете слияние неправильно, то отбросить его, а затем сделать "то же самое" слияние снова, это будет неправильно снова. Однако вы можете забыть записанное разрешение. От документация:
git rerere forget <pathspec>
это сбрасывает разрешения конфликтов, которые rerere записал для текущего конфликта в
<pathspec>
.будьте осторожны, чтобы использовать его на определенных путях; вы не хотите, чтобы сдуть все записанные резолюций повсюду. (
forget
без аргументов была устаревший чтобы спасти вас от этого, если вы введетеgit rerere forget .
чтобы явно запросить его.)но если вы не думаете, чтобы сделать это, вы можете легко в конечном итоге положить, что неправильное слияние в вашей истории..
Как упоминает Дж. К. Хамано в своей статье" весело с rerere"
- Rerere помнит, как вы решили разрешить конфликтные регионы;
- Rerere также помнит, как вы коснулись вне конфликтных регионов, чтобы приспособиться к семантическим изменениям;
- Rerere может повторно использовать предыдущее разрешение, даже если вы объединяли две ветви с разным содержимым, чем тот, который вы разрешили ранее.
даже люди, которые используют rerere в течение длительного времени часто не замечают последний пункт.
Так что если вы активируете
rerere
при слишком широком содержании вы можете получить удивительное или запутанное разрешение слияния из-за последней точки.
Я черри выбрал фиксацию (в gitk), которая содержала только двоичный файл. Cherrypick потерпел неудачу из-за конфликта (что естественно), и я решил конфликт, сохраняя вишневый выбор. Я был удивлен позже, чтобы найти в другое rebased ветвь, что мои DLL не ведут себя-только чтобы обнаружить, что они не были перенесены в rebase как (я предполагаю) автоматическое разрешение конфликтов. Так что это единственный случай, когда я встретил (с включенным rerere) запуск в нелогичное (хотя я уверен, что совершенно последовательное) поведение.