Подтвердить что ты не робот

Mercurial: обновление до версии, но не изменение локальных файлов

Предположим, что в репозитории имеется 20 версий. Текущей версией записи является версия 10, а фактические локальные файлы основаны на последней версии 20. Я не хочу вступать в ветвь из ревизии 10. Я хочу продолжить ревизию 20.

В настоящее время я делаю это, чтобы скопировать все файлы из каталога версий, запустить hg update -C (который обновляет номер версии), удалить все файлы в каталоге репозитория, скопировать все файлы обратно, затем совершить. Вы можете сказать, что это раздражает и время расточительно. Есть ли способ обновить номер версии, но не изменить какой-либо локальный файл?

Спасибо заранее.

EDIT: существует много вариантов использования (в основном я использую TortoiseHg).

1) Я ошибочно выбираю "Нет", когда вам предлагается удалить файлы из репозитория во время фиксации. Я могу использовать полосу из mq, чтобы удалить ревизию, но это вернет все зарегистрированные файлы. Вместо этого я хочу "переименовать" предыдущую ревизию, снова зафиксировать, а затем удалить ненужную ревизию. Это может случиться с кем угодно в любое время, а не только я, а не только один раз.

2) У меня была машина для разработки A. Я запустил проект на ней и переключился на машину B через несколько месяцев. Код на A стареет, а код в B не изменяется. Если я хочу продолжить разработку на A, мне нужно скопировать код в через Flash или в сеть и т.д. Теперь я хочу зафиксировать A без разветвления (потому что код на A фактически основан на текущем кончике). Это происходит, может быть, реже, но все же не "один раз", и, возможно, при участии в большом проекте.

3) В репозитории есть 2 ветки C и D. Имеется примерно 2000 файлов. Текущий совет в C. Я хочу переписать некоторые файлы в D с теми же именами файлов на C (потому что C более реализован), сохраняя при этом другие файлы без изменений, а затем создайте новый отзыв в D. У меня есть несколько вариантов. Я мог бы обновиться до D, сравнить последнюю ревизию D с текущим кончиком, внести изменения и зафиксировать. Обновление потребуется некоторое время, и сложность сравнения в значительной степени зависит от инструмента сравнения. Я мог бы также сначала сравнить, внести изменения, создать резервную копию всего каталога, обновить до D, а затем восстановить весь каталог. Это еще более громоздко. Но если я могу "переименовать" в D, мне просто нужно внести изменения и совершить. Это не зависит от инструмента сравнения, поскольку окно фиксации в TortoiseHg имеет список различий.

Если вы хотите думать, может быть больше случаев использования. Надеюсь, Mercurial предоставляет такую ​​функцию "переименования" (предположительно новую опцию для обновления hg) или, по крайней мере, удобную альтернативу.

4b9b3361

Ответ 1

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

https://web.archive.org/web/20170805042314/http://hgtip.com/tips/advanced/2010-04-23-debug-command-tricks

В частности, чтобы "переоткрыть" ваш текущий рабочий каталог, введите:

hg debugsetparent 20
hg debugrebuildstate

Ответ 2

Вы можете использовать hg debugsetparents, чтобы установить родительскую ревизию вашей рабочей копии.

Ответ 3

По умолчанию hg update уже сохранит ваши незафиксированные изменения. Поэтому после hg update вы все равно увидите свои незафиксированные изменения в hg status и hg diff. Нет необходимости копировать файлы из рабочей копии и обратно.

Тем не менее, может быть безопаснее просто зафиксировать ваши изменения как ветку ревизии 10. Таким образом, ваши изменения будут безопасно записаны. Затем вы можете выполнить merge или rebase с пересмотром 20 в отдельной фиксации без необходимости беспокоиться о том, что вы потеряете что-то во время работы по разрешению конфликтов.

FYI есть опции, которые изменяют поведение по умолчанию hg update, как описано в hg update documentation. --check или -c откажется обновить, если у вас есть незафиксированные изменения. --clean или -c (то, что вы использовали до сих пор) выкинет любые незафиксированные изменения.