Как удалить все неотслеживаемые файлы из моего рабочего каталога в Mercurial?

207

Можно ли удалить все неотслеживаемые файлы из моего рабочего каталога? Допустим, я добавил кучу файлов в свой рабочий каталог, не добавил их через «hg add» и теперь хочу полностью избавиться от этих новых файлов?

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

Валентин Васильев
источник

Ответы:

286

Добавьте расширение Mercurial, называемое продувкой . Распространяется Mercurial.

Это расширение добавляет команду «purge» к «hg», которая удаляет файлы, неизвестные Mercurial. т.е. неотслеживаемые файлы. Так что ваша команда будет,

hg purge

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

Чтобы установить это расширение, добавьте его в файл настроек Mercurial (.hgrc в Unix, Mercurial.ini в Windows)

[extensions]
purge = 

Для временного включения этого расширения вы можете использовать

hg purge --config extensions.purge= 
simplyharsh
источник
26
hg purge --allудалит все неотслеживаемые и игнорируемые файлы. Это полезно для очистки сборок в исходном
коде
22
чтобы временно включить ext вы можете использоватьhg purge --config extensions.purge=
Pykler
121

Правильный способ без продувки это:

hg st -un0 | xargs -0 rm
тонфа
источник
1
@simplyharsh - это лучше, или вы просто нашли его менее эффективным, чем добавление расширения?
Яаков Куперман
3
@YaakovKuperman Я думаю, что добавление расширения - это меньшая работа, чем эта команда (одноразовое включение). Я не включаю продление очистки, потому что оно мне нужно менее одного раза в две недели. Также называйте меня глупым, но ввод этой команды дает мне достаточно времени, чтобы подумать еще раз, прежде чем делать что-то столь же отвратительное, как «чистка».
justharsh
2
@simplyharsh, это имеет смысл, но есть две причины, по которым я бы все равно пошел на чистку. Во-первых, вы можете выполнить hg purge --print и увидеть список того, от чего он избавится, прежде чем выполнять чистку. Во-вторых, если вы делаете это таким образом, вы должны быть в корне репо, чтобы он работал.
Яаков Куперман
1
@javawizard: Это хороший, который заставил меня переосмыслить, как работает hg. Однако это работает только потому, что rm -rf *пропускает точечные файлы и точечные каталоги, в том числе .hg/. Точно так же любой другой точечный файл (скажем, .evil-settings) также выживет и очистка будет лучше.
dirkjot
2
Имейте в виду, что между поведением hg st -u и hg purge есть разница в поведении. 'hg st -u' НЕ НАЙДЕТ неотслеживаемых пустых каталогов, в то время как 'hg purge' НАЙДЕТ (и удалит) их. Это может или не может быть важно для вас.
Майкл Кент
19

Спасибо! Это работало для меня также в Powershell:

hg st -un | rm
Николаос Георгиу
источник
2
xargs не работает в powershell - это единственный ответ, который из коробки «дружественный к окнам»
Никос Атанасиу
согласился ... во-вторых, xargs не работает в powershell ... хотя чистка все еще возможна
beauXjames
Работал для меня :)
Навин Кумар V
4
rm $(hg st -u)

... где -u означает "неотслеживаемый", вы также можете выбрать другое состояние.

Alex
источник
4

Ты можешь использовать

hg purge --all

удалить все проигнорированные и неотслеживаемые файлы

(сначала нужно установить расширение для продувки, как описано в некоторых ответах)

Алекс Л
источник
3

Попробуйте следующее:

hg st -un | xargs rm
Алексей Теницкий
источник
2

Это должно сделать трюк:

hg status | grep '^\?' | sed 's/^\? //' | xargs rm -rf
Kristian
источник
2

если вы не хотите использовать продувку:

rm $(hg st | grep ^? | awk '{print $2}')
лев
источник
0

Предполагая, что вы используете систему * nix, вы можете запустить что-то вроде этого:

rm `hg st | awk '/\?/ {print $2}'`

из корня ртутного хранилища.

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

Пожалуйста, используйте эту команду с осторожностью, поскольку она не была тщательно протестирована.

Генрих Фильтр
источник
0

Это работает из командной строки Windows 10 (используется осторожно, конечно):

for /f %g in ('hg status -un') do @echo %g & @del %g
Дейв Кузино
источник