Como excluo todos os arquivos não rastreados do meu diretório de trabalho no Mercurial?

207

É possível excluir todos os arquivos não rastreados do meu diretório de trabalho? Digamos que eu adicionei vários arquivos ao meu diretório de trabalho, não os adicionei via 'hg add' e agora quero me livrar desses novos arquivos completamente?

Estou no Windows, embora esteja usando o PowerShell, portanto, uma solução combinada também é possível aqui.

Valentin Vasilyev
fonte

Respostas:

286

Adicione a extensão Mercurial chamada limpeza . É distribuído pela Mercurial.

Esta extensão adiciona um comando "limpar" a "hg" que remove arquivos não conhecidos pelo Mercurial. ou seja, arquivos não rastreados. Então seu comando seria,

hg purge

Não está ativado por padrão, talvez para evitar a remoção acidental de arquivos que você esqueceu de adicionar.

Para instalar esta extensão, adicione-a ao seu arquivo de configurações mercurial (.hgrc no Unix, Mercurial.ini no Windows)

[extensions]
purge = 

Para ativar esta extensão temporariamente, você pode usar

hg purge --config extensions.purge= 
simplyharsh
fonte
26
hg purge --allexcluirá todos os arquivos não rastreados e ignorados. Isso é útil para limpar compilações no código-fonte
tacaswell 27/10/12
22
para habilitar o ext temporariamente, você pode usarhg purge --config extensions.purge=
Pykler
121

A maneira correta sem purgar é:

hg st -un0 | xargs -0 rm
tonfa
fonte
1
@simplyharsh é assim melhor ou você achou menos trabalhoso do que adicionar a extensão?
Yaakov Kuperman
3
@YaakovKuperman Eu acho que adicionar extensão é menos trabalhoso que esse comando (habilitação única). Não habilito a extensão de limpeza porque preciso dela menos de uma vez em quinze dias. Também me chame de bobo, mas, digitar este comando, dá-me tempo suficiente para pensar novamente antes de fazer algo tão destrutivo quanto 'limpar'.
precisa saber é o seguinte
2
@simplyharsh, isso faz sentido, mas há duas razões pelas quais eu iria purgar da mesma forma. Primeiro, você pode fazer o hg purge --print e ver uma lista do que ele vai se livrar antes de fazer o expurgo. Segundo, se você fizer dessa maneira, precisará estar na raiz do repositório para que ele funcione.
precisa saber é o seguinte
1
@ javawizard: Este é um bom que me fez repensar como hg funciona. No entanto, ele só funciona porque rm -rf *ignora arquivos e diretórios de pontos, inclusive .hg/. Da mesma forma, qualquer outro arquivo de ponto (por exemplo, configurações do diabo) também sobreviverá e a limpeza será melhor.
dirkjot
2
Esteja ciente de que há uma diferença de comportamento entre o que 'hg st -u' e 'hg purge' encontram. 'hg st -u' NÃO encontrará diretórios vazios não rastreados, enquanto 'hg purge' os encontrará (e remove). Isso pode ou não ser importante para você.
Michael Kent
19

Obrigado! Isso funcionou para mim também no Powershell:

hg st -un | rm
Nikolaos Georgiou
fonte
2
xargs não funciona no PowerShell - esta é a única resposta que está fora da caixa "janelas amigáveis"
Nikos Athanasiou
concordou ... em segundo lugar na xargs não trabalham em powershell ... purga ainda é uma opção viável, embora
beauXjames
Trabalhou para mim :)
Naveen Kumar V
4
rm $(hg st -u)

... onde -u significa "não rastreado", você também pode escolher outro estado.

Alex
fonte
4

Você pode usar

hg purge --all

remover todos os arquivos ignorados e não rastreados

(primeiro você precisa instalar a extensão de limpeza, conforme explicado em algumas respostas)

Alex L
fonte
3

Tente o seguinte:

hg st -un | xargs rm
Alexei Tenitski
fonte
2

Isso deve fazer o truque:

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

se você não quiser usar a limpeza:

rm $(hg st | grep ^? | awk '{print $2}')
Lev
fonte
0

Supondo que você esteja usando um sistema * nix, você pode executar algo como isto:

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

da raiz do repositório mercurial.

Não conheço um comando mercurial padrão para obter o mesmo, mas acredito que há muito mais opções de linha de comando para fazer isso. Tenho certeza de que existem soluções "melhores" e estaria interessado em ouvir outras sugestões.

Por favor, use este comando com cuidado, pois não foi completamente testado.

Filtro Heinrich
fonte