Как вырезать меркуриальный репозиторий из определенной ревизии/пуша

Я сломал некоторый код в своих последних 4-5 ревизиях/пушах в основной репозиторий. Сейчас я хочу полностью удалить эти нажатия и запустить HEAD моего репозитория с этой точки. Как я могу это сделать? В SVN есть команда dump, которая копирует весь репозиторий из одной ревизии в другую. Есть какая-то замена в Mercurial или как-то иначе?


person quardas    schedule 24.09.2010    source источник
comment
Похоже на дубликат -an-hg-push-backout   -  person Geoffrey Zheng    schedule 24.09.2010


Ответы (2)


Quardas, «полное удаление» не является частью стандартного словаря mercurial. Это система, построенная вокруг неизменной истории. Вы можете отменить то, о чем сожалеете, но вы не удаляете это. Представьте себе ученого в своей лаборатории, который пишет ручкой на пронумерованных страницах бортового журнала — вырывание страницы считается мошенничеством. Есть ценность в сохранении ваших слепых союзников и ошибок хотя бы для того, чтобы вы помнили, что не пытаетесь повторить это снова.

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

Если вы действительно не согласны с этой концепцией, попробуйте изучить clone -r. Это позволяет вам клонировать ваш репозиторий до определенного момента. Например:

hg clone -r -6 myrepo partial-myrepo
mv myrepo myrepo-with-stuff-I-regret
mv partial-myrepo myrepo

это заменит ваше репо новой копией, в которой отсутствуют последние пять наборов изменений.

Есть много других способов сделать то же самое, используя инструменты, которые не являются частью набора инструментов mercurial по умолчанию (расширения, такие как histedit, strip, mercurial queues и т. д.), но вам лучше вообще не удалять историю и делать это без расширений, если вы это сделаете.

person Ry4an Brase    schedule 24.09.2010
comment
Не тогда, когда ученый владеет лабораторией и журналом регистрации и записывает пароль, который он должен был хранить в другом месте или в своей голове. Когда разработчик допускает ошибку раскрытия информации, сохранять ошибку не лучше. Некоторые ошибки не являются ошибками кода, некоторые — это пароли, закрытые ключи и проприетарные документы, которые необходимо стереть/извлечь перед публикацией. С SVN это было так же просто, как дамп svnadmin, глобальная замена, восстановление новых репозиториев из дампа. Это должно быть так просто с hg, потому что это обычная случайность. - person codenheim; 24.02.2016
comment
Конечно, но этот вопрос был о сломанном коде. Histedit и его друзья делают реальную модификацию истории проще, чем дамп и восстановление, но, конечно, с любой системой есть оговорка, что все, до чего уже добрались другие, исчезло. Обычно лучше просто создать новые учетные данные. - person Ry4an Brase; 24.02.2016

Для этого вы можете использовать convertextension.
Хотя я не совсем понимаю почему люди всегда хотят скрыть/удалить в своей истории VCS то, что они допустили ошибку. Это не так критично, пока вы исправляете это в более новой версии...

person gizmo    schedule 24.09.2010
comment
gizmo, я полностью согласен с тем, что удаление истории - плохая идея. - person Ry4an Brase; 24.09.2010
comment
Это неплохая идея, когда у вас есть конфиденциальная информация, которую нужно полностью стереть, не теряя при этом историю проекта. Распространенной ошибкой является слишком позднее обнаружение того, что конфиденциальный пароль был проверен в проекте, который необходимо опубликовать для более широкой аудитории. Разговор о лучших практиках неуместен, важно уметь это исправить. Hg - это электроинструмент. Он не должен пытаться думать за меня. Дело в том, что конфиденциальная информация будет раскрыта. Вопрос в том, что мы теряем, чтобы достичь этого. Заставлять пользователя использовать ядерный вариант — не лучший способ. - person codenheim; 24.02.2016