После пуша в репозиторий комментарий, "аборт: не могу перебазировать неизменных изменений" о перебазировании


У нас есть хранилище обзора кода, где люди hg push -f все виды вещей. После завершения проверки мы извлекаем данные из центрального репозитория проекта, перебазируем и нажимаем. Недавно я обновился до mercurial 2.1 и получил следующее сообщение:

abort: can't rebase immutable changeset 43ab8134e7af
(see hg help phases for details)

Когда я пытаюсь hg pull --rebase из центрального хранилища. Как мне это исправить?

3 23

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