Почему Mercurial имеет только один уровень отката? - PullRequest
16 голосов
/ 18 июня 2010

Я понимаю ограничения отката и осторожность при его использовании , но я просто удивился, почему существует только один уровень отката.

Мое предположениеэто проектное решение, и проблема с сохранением нескольких предыдущих транзакционных состояний для обработки нескольких уровней отката - это больше проблем, чем стоит.

Ответы [ 2 ]

13 голосов
/ 18 июня 2010

Существует только один уровень отката, потому что откат никогда не задумывался как функция.Откат существует и имеет свое странное имя, потому что он вырос из системы транзакций commit / push / pull Mercurial.

Если приходит сетевой push-запрос, и он выполняется на 99%, а затем соединение теряется, хранилищене следует оставлять в несогласованном состоянии.Чтобы удостовериться, что незавершенное изменение может быть отброшено, создается указатель «до того, как что-то произошло», прежде чем любые записи выполняются, и если изменение отменяется, все возвращается в это состояние - откат.

rollback команда действительно просто «проваливает» предыдущую операцию после ее успешного завершения.Это просто то, что «освободилось» после того, как была разработана необходимая безопасность транзакций.

При использовании чего-то вроде управляющего хука можно определить проверки / тесты, которые должны быть пройдены для толчкаили подтвердите, чтобы завершить успешно.Чтобы не завершить успешно, должна быть возможность отменить текущую фиксацию, но для этого также не требуется несколько уровней.

Как правильно замечает VonC, откат может быть довольно опасным.Многие люди откатывают изменения, которые они уже выдвинули, и затем становятся очень смущенными, когда другие эти изменения возвращаются при последующих попытках.Команда hg backout почти всегда является лучшей идеей.

Обратите также внимание, что вы можете легко смоделировать откат к любому моменту времени, выполнив следующее:

hg clone -r last_revision_I_want repo_with_things_I_do_not_want new_repo_with_only_good_stuff
5 голосов
/ 18 июня 2010

Хитрость в том, что hg rollback - это не просто сброс некоторых коммитов, это сброс всех данных и метаданных, связанных с хранилищем.
На самом деле не имеет эквивалента в Git , и этодовольно опасный механизм.
Его можно неправильно использовать как способ переписать историю, сбрасывая ее, и что может "сбросить" больше, чем вы хотели .
Чтобы разрешить это для болееболее одного уровня назад было бы слишком опасно.

Когда дело доходит только до сброса / переписывания набора изменений (которые по конструкции являются неизменными), расширения , такие как MQ , являютсялучше подходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...