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.