После отправки в репозиторий отзывов "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>), а затем исправил этот самый новый коммит.

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