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.

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= 

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

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

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.


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)



2

Isso deve fazer o truque:

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

2

se você não quiser usar a limpeza:

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

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.