После отправки в репозиторий отзывов "abort: не удается перебазировать неизменяемый набор изменений" при перебазировании
У нас есть репозиторий кода, где люди hg push -f
все виды вещей. После завершения проверок мы извлекаем данные из центрального репозитория проекта, перебазируем и отправляем. Я недавно обновился до Mercurial 2.1 и получаю это сообщение:
abort: can't rebase immutable changeset 43ab8134e7af
(see hg help phases for details)
когда я пытаюсь hg pull --rebase
из центрального хранилища. Как мне это исправить?
3 ответа
В файле.hg/hgrc репозитория обзора добавьте следующие строки:
[phases]
publish = False
Проблема связана с новой функцией в Mercurial 2.1, называемой фазами. Это великолепно. Вот хорошее введение в его использование.
Чтобы сделать изменяемые наборы данных изменяемыми прямо сейчас, используйте hg phase -f -d REV
заставить REV быть изменчивым снова. Как только файл hgrc был изменен, вам больше не нужно это делать.
Как примечание стороны, hg push -f
хромает Сделать псевдоним hg review
это толкает с -f
в этом хранилище.
Я не думаю, что отключение поддержки фазы на сервере является правильным решением, но ваша проблема звучит странно.
Pull --rebase
следует перебазировать ваши локальные изменения поверх удаленных изменений, что должно быть разрешено, даже если фазы поддерживаются клиентом, если эти изменения не были замечены кем-либо еще, например. они нигде не были вытеснены.
Возможно ли, что вы уже выдвинули свои собственные изменения куда-то еще (что устанавливало их в публичную фазу), и после этого попытались вытащить из репозитория тестирования? Потому что тогда это правильное поведение, которое вы видите.
В большинстве случаев плохая идея связываться с фазами вручную (с hg phase -f
), потому что это может легко привести к переписыванию истории, что может привести к дублированию наборов изменений или различным ошибкам, когда другие люди пытаются тянуть / толкать. Если набор изменений стал помечен как общедоступный (как в вашем случае), это, вероятно, произошло по уважительной причине.
Я сталкивался с таким поведением при свернутой ребазе. Отказ от проекта не помог мне. Так что я только что подъехал (hg pull -u
) для синхронизации с удаленным репо, а затем просто привил проблему фиксации (hg graft <problem_commit>
), а затем исправил этот самый новый коммит.