Как удалить все неотслеживаемые файлы из моего рабочего каталога в 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= 

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 означает "неотслеживаемый", вы также можете выбрать другое состояние.


4

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

hg purge --all

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

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



2

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

hg status | grep '^\?' | sed 's/^\? //' | xargs rm -rf

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.