В Mercurial фаза ревизии может быть изменена произвольно. Каковы последствия изменения фазы для всех возможных переходов (общедоступный, черновой, секретный) x (общедоступный, черновой, секретный)? Какие фазовые переходы безопасны? Что может вызвать проблемы и какие проблемы? Какие из них более или менее бесполезна?
Mercurial: каковы последствия смены фазы?
Ответы (2)
Фаза фиксации по умолчанию — draft
, так они обрабатывались, когда фаз не существовало. При нажатии набора изменений draft
mercurial автоматически меняет свою фазу на public
. Вы можете использовать его, чтобы узнать, какие наборы изменений вы уже опубликовали, а какие нет.
Но реальная проблема заключается в том, что когда набор изменений находится в фазе public
, mercurial не позволит вам изменить их с помощью расширений редактирования истории (таких как mq
, rebase
и т. д.). Это действительно важно, потому что редактирование истории происходит только в локальном репозитории, они не распространяются с помощью pull
/push
операций. Итак, когда набор изменений опубликован, он выходит из-под контроля, его опасно менять.
Вы можете перейти из любой фазы в любую другую фазу. «Нормальный поток» заключается в переходе на более высокую фазу (секрет-> черновик-> общедоступная), но Mercurial позволяет перейти на более низкую фазу с помощью опции --force
. Само по себе изменение фазы безвредно. Например, единственное, что происходит при переходе с public
на draft
или secret
, это то, что сбрасывается защита редактирования истории, больше ничего, pull и push будут по-прежнему работать нормально, Mercurial никогда не сможет запутаться в наборах изменений, потому что они имеют уникальные идентификаторы. . Действие по редактированию истории, которое происходит после подобного фазового изменения, может вызвать проблемы. Вот почему Mercurial выдает предупреждение при изменении фазы и требует опцию --force
в качестве подтверждения того, что вы действительно этого хотите.
Как правило, опубликованные коммиты не должны изменяться, это то, что пытаются обеспечить этапы. Но, возможно, у вас есть контроль над всеми репозиториями. Или, может быть, вы что-то толкнули и знаете, что это еще никто не тянул. Какой бы ни была причина, у вас есть возможность принудительно вернуть фазу наборов изменений к черновику и отредактировать их. Но это издание должно быть сделано в каждом репозитории, в котором есть наборы изменений.
--force
. Само изменение фазы не вызывает никаких проблем. Что может вызвать проблему, так это то, что вы делаете после изменения фазы. Когда вы меняете с public
на draft
, вы снимаете защиту редактирования истории, это позволяет вам все испортить.
- person Rafael Piccolo; 30.10.2012
- Общедоступную редакцию нельзя редактировать с помощью инструментов редактирования истории (например,
mq
,rebase
). - Ревизию secret нельзя отправить в другой репозиторий (она будет проигнорирована, когда вы дадите команду push или когда другой репозиторий попытается извлечь).
- Редакция черновик допускает и то, и другое, но автоматически становится общедоступной, если она будет перемещена в другой репозиторий.
Цель фазовой системы — предотвратить изменение ревизии после того, как вы отправили ее в другой репозиторий, что является плохой идеей, если только вы не можете удалить старую версию ревизии из всех репозиториев, в которые она была отправлена. .
Все фазовые изменения более или менее бесперспективны; это просто маркер, указывающий, что безопасно, а что небезопасно делать с ревизией.