Como remover automaticamente todos os arquivos .orig em árvore de trabalho Mercurial?

StackOverflow https://stackoverflow.com/questions/1067680

  •  21-08-2019
  •  | 
  •  

Pergunta

Durante arquivo Fusões folhas mercuriais .orig para qualquer arquivo não resolvido. Mas depois de resolver manualmente problemas e marcando um arquivo corrigir não excluir o arquivo .orig. ele pode ser removido automaticamente por algum comando?

Eu trabalho em um Mac para que eu possa usar algo como:

find . -iname '*.orig' -exec rm '{}' ';'

e apelido ou algo assim, mas eu prefiro usar algo como limpeza hg ...

UPDATE:

Desde algum tempo, Purge extensão é empacotado com Mercurial e resolve este problema bem.

Foi útil?

Solução

Pessoalmente, eu uso

$ rm **/*.orig

se eu ficar cansado dos arquivos .orig. Isso funciona em Zsh e em Bash 4 depois de executar shopt -s globstar.

Mas se você usar outro shell ou quer um built-in solução, então talvez você vai gostar do extensão purga (link atualizado 2016/08/25). Que permite remover todos os arquivos untracked com

$ hg purge

Você pode remover todos os arquivos untracked e ignorados com

$ hg purge --all

Uma vantagem de usar hg purge é que este será também diretórios de limpeza que ficam vazios depois de remover os arquivos. A linha de comando rm só vai deixar os diretórios vazios para trás.

Outras dicas

btw. utilitário find tem uma acção -delete assim você pode digitar apenas:

find <path-to-files> -name '*.orig' -delete

Se você quiser apenas para excluir os arquivos .orig, e acontecer de você estar em um computador Windows, o seguinte parece funcionar bem:

D:\workspace>hg purge -I **/*.orig --all

Isto irá apagar todos os arquivos untracked que terminam em .orig, mas não vai apagar outros arquivos untracked, como as outras respostas faria.

Você pode testar isso antes de executá-lo, colocando a bandeira --print no bem.

A seguir irá remover arquivos .orig em toda a sua hierarquia de cópia de trabalho e também funciona para caminhos que contêm espaços:

find . -name *.orig | while read -d $'\n' file; do rm -v "$file"; done;

Eu uso um alias na minha .bash_profile:

alias clearorig='echo "Removing .orig files..."; find . -name *.orig | \
while read -d $'\''\n'\'' file; do rm -v "$file"; done;'

você deve usar o hook update

Atualização: Este é executado após uma atualização ou merge do diretório de trabalho tenha terminado

Tenho postado esta resposta antes . Mas este é o lugar correto para esta resposta.

Eu fiz este arquivo de lote mim.

IF "%1%" == "d" (
    del /s *.orig
    del /s *.rej
 ) ELSE ( 
    del /s /p *.rej
    del /s /p *.orig
 )

Ajuda: Salvar este conteúdo como orig.bat

  1. Executar orig d para excluir todas as rejeições e arquivos orig ao mesmo tempo sem confirmação
  2. Executar orig para apagar arquivos com a confirmação [Mecanismo de Segurança]

Hope isso é útil.

Eu pessoalmente uso o seguinte a partir da raiz do repo:

hg purge -p -I **/*.orig | xargs rm -f

É um pouco melhor do que usar apenas 'purga hg' ou 'hg purga --all' porque você pode filtrar os tipos de arquivo específico que você deseja incluir.

Para uma explicação:

  • O argumento -p imprime a lista de arquivos a ser purgado
  • O argumento -I whitelist filtra os arquivos a serem incluídos
  • A lista resultante é canalizada para xargs e executado usando o comando rm -f

Eu estou trabalhando em Powershell e não ver a resposta aqui:

# NOTE: be in the root of your repository
# fetch all .orig files recursively
$orig = (dir *.orig -recurse) ;

# remove each .orig file
foreach ($item in $orig) { del $($item.FullName) ; }

# afterwards I make sure to remove the references to the .orig files in the repo
# then commit & push
hg addremove ; 
hg commit -m "remove .orig" ;
hg push ;

Esta não é uma forma automática de remoção de arquivos extras, mas é o suficiente simples para executar manualmente.

O hg st pode mostrar desconhecidos ou não rastreado arquivos. Você pode usar essa saída como um argumento para o comando rm sistema. Aqui está um exemplo real que acabou de realizar:

$ # SHOW ONLY THE CRUFT
$ hg status --unknown
? config/settings.rb.orig
? lib/helpers.rb.orig
? routes/main.rb.orig

$ # THE CRUFT WITHOUT THE "?" PREFIX
$ hg status --unknown --no-status
config/settings.rb.orig
lib/helpers.rb.orig
routes/main.rb.orig

$ # SAFELY REMOVE ALL CRUFT
$ rm -- `hg st -un`

Se você tiver diretórios vazios deixados para trás, os -r e -d bandeiras para rm pode ajudar.

Como bônus , hg status --ignored poderia ser usado para limpeza de todos os arquivos temporários ignorados, bem como arquivos de swap de seu editor (por exemplo, Vim).

Um comando que eu uso no Linux para limpeza, poupa a necessidade de fazer uma nova busca com find.

Estes precisam ser executado a partir do diretório raiz do projeto Mercurial

hg status | grep ".orig" | cut -d ' ' -f 2- | xargs rm -f

Ou se você quiser limpar todos os arquivos desconhecidos.

hg status | cut -d ' ' -f 2- | xargs rm -f

Eu não gosto da resposta escolhida. Ele não removeu tudo dentro de todos os níveis do projeto. Eu uso este:

for f in `find . | grep .orig$`; do rm "$f"; done

funciona tanto em Mac e * nix

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top