Mercurial - Как отказаться от всех локальных изменений, в том числе от неверсированных файлов?

Я перемещаю процесс сборки, чтобы использовать mercurial, и хочу вернуть рабочий каталог в состояние пересмотра подсказки. Ранние запуски процесса сборки изменят некоторые файлы и добавят некоторые файлы, которые я не хочу фиксировать, поэтому у меня есть локальные изменения и файлы, которые не добавлены в репозиторий.

Какой самый простой способ отбросить все это и получить чистый рабочий каталог с последней версией?

В настоящее время я делаю это:

hg revert --all
<build command here to delete the contents of the working directory, except the .hg folder.>
hg pull
hg update -r MY_BRANCH

но кажется, что должен быть более простой способ.

Я хочу сделать эквивалент удаления репо, сделать новый клон и обновление. Но репо слишком велико для того, чтобы быть достаточно быстрым.

Ответ 1

Эти шаги должны быть сокращены до:

hg pull
hg update -r MY_BRANCH -C

Флаг -C сообщает команде update отменить все локальные изменения перед обновлением.

Однако это может по-прежнему оставлять неиспользуемые файлы в вашем репозитории. Похоже, вы тоже хотите избавиться от них, поэтому я бы использовал расширение purge для этого:

hg pull
hg update -r MY_BRANCH -C
hg purge

В любом случае нет единой команды, которую вы можете запросить у Mercurial, которая будет делать все, что вам нужно, за исключением случаев, когда вы меняете процесс на этот метод "полного клонирования", который, как вы говорите, не может сделать.

Ответ 2

hg up -C

Это приведет к удалению всех изменений и обновлению до последней главы в текущей ветке.

И вы можете включить расширение для удаления, чтобы иметь возможность удалять все неверсированные файлы.

Ответ 3

Чтобы удалить untracked на * nix без расширения очистки, вы можете использовать

hg pull
hg update -r MY_BRANCH -C
hg status -un|xargs rm

Что использует

update -r --rev Версия REV

update -C - очистить незафиксированные изменения (без резервного копирования)

status -u -unknown показывать только неизвестные (не отслеживаемые) файлы

статус -n -no-статус скрыть префикс состояния

Ответ 4

Если вы ищете метод, который легко, вы можете попробовать это.

Я для себя не могу вспомнить командные строки для всех моих инструментов, поэтому я стараюсь делать это с помощью пользовательского интерфейса:


1. Сначала выберите "commit"

Commit

2. Затем отобразите проигнорированные файлы. Если у вас есть незафиксированные изменения, скройте их.

Показать проигнорированные файлы

3. Теперь выберите все из них и нажмите "Удалить без преобразования".

Удалить их

Готово. Это процедура, которую намного легче запомнить, чем материал командной строки.

Ответ 5

hg status покажет вам все новые файлы, а затем вы можете просто rm их.

Обычно я хочу избавиться от игнорируемых и неверсированных файлов, поэтому:

hg status -iu                          # to show 
hg status -iun0 | xargs -r0 rm         # to destroy

И затем следуйте этому:

hg update -C -r xxxxx

который помещает все файлы с версиями в правильное состояние для версии xxxx


Чтобы следовать традиции, говорящей вам, что вы не хотите этого делать, я часто нахожу, что этот "ядерный вариант" уничтожил все, что мне нужно.

Правильный способ сделать это - сделать "make clean" в вашем процессе сборки и, возможно, "make reallyclean" и "make distclean" тоже.