Отменить все и получить чистую копию последней ревизии? - PullRequest
153 голосов
/ 10 февраля 2011

Я перевожу процесс сборки на использование 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

но этоПохоже, что должен быть более простой способ.

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

Ответы [ 5 ]

204 голосов
/ 10 февраля 2011

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

hg pull
hg update -r MY_BRANCH -C

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

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

hg pull
hg update -r MY_BRANCH -C
hg purge

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

107 голосов
/ 10 февраля 2011
hg up -C

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

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

10 голосов
/ 17 сентября 2014

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

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

Который использует

update -r --rev REV revision

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

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

status -n --no-status скрыть префикс статуса

3 голосов
/ 27 февраля 2017

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

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

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

И затем выполните это с помощью:

hg update -C -r xxxxx

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


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

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

3 голосов
/ 12 сентября 2015

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

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


1.Сначала выберите «совершить»

Commit

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

Show ignored files

3.Теперь выберите все из них и нажмите «Удалить Unversioned».

Delete them

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

...