Почему делает Подвижный, только имеют один уровень отката?

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

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

16
задан Martin Geisler 18 January 2012 в 10:45
поделиться

2 ответа

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

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

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

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

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

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

hg clone -r last_revision_I_want repo_with_things_I_do_not_want new_repo_with_only_good_stuff
13
ответ дан 30 November 2019 в 22:30
поделиться

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

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

5
ответ дан 30 November 2019 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: