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" тоже.