Alguém conhece uma maneira de remover recursivamente todos os arquivos em uma cópia de trabalho que não estão sob controle de versão? (Eu preciso disso para obter resultados mais confiáveis no meu VMware de compilação automática.)
svn
build-automation
Stefan Schultze
fonte
fonte
hg purge --all
no Mercurial.Respostas:
Editar:
O Subversion 1.9.0 introduziu uma opção para fazer isso:
Antes disso, uso este script Python para fazer isso:
Parece funcionar muito bem.
fonte
svn cleanup --remove-unversioned
é melhor. E é para Subversion 1.9.0 (esta versão é de 2015). É estável e normal.isso funciona para mim no bash:
Seth Reno é melhor:
Ele lida com pastas não versionadas e espaços em nomes de arquivos
Conforme os comentários abaixo, isso só funciona em arquivos que o subversion não conhece (status =?). Qualquer coisa que a subversão não saber sobre (incluindo arquivos ignorados / pastas) não será excluído.
Se você estiver usando o subversion 1.9 ou superior, você pode simplesmente usar o comando svn cleanup com as opções --remove-unversioned e --remove-ignore
fonte
svn status | grep "^?" | awk '{print $2}' | xargs -d \\n rm -r
Eu encontrei esta página enquanto procuro fazer a mesma coisa, embora não para uma construção automatizada.
Depois de procurar um pouco mais, descobri o ' Menu de contexto estendido ' no TortoiseSVN. Segure a tecla shift e clique com o botão direito na cópia de trabalho. Existem agora opções adicionais no menu do TortoiseSVN incluindo ' Excluir itens não versionados ... '.
Embora talvez não seja aplicável a esta questão específica (ou seja, no contexto de uma construção automatizada), pensei que poderia ser útil para outras pessoas que procuram fazer a mesma coisa.
fonte
Veja: svn-clean
fonte
Se você estiver na linha de comando do Windows,
Versão melhorada:
Se você usar isso em um arquivo em lote, será necessário dobrar
%
:fonte
Eu adicionei isso ao meu perfil do Windows PowerShell
fonte
--no-ignore
asvn status
e-Recurse
aRemove-Item
Linha de comando do Linux:
Ou, se alguns de seus arquivos pertencerem ao root:
Isso é baseado na resposta de Ken. (A resposta de Ken pula os arquivos ignorados; minha resposta os exclui).
fonte
Basta fazer isso no shell do Unix com:
fonte
Você não pode simplesmente exportar para um novo local e construir a partir daí?
fonte
Se você tem TortoiseSVN em seu caminho e está no diretório certo:
As opções são descritas na ajuda do TortoiseSVN para
/command:cleanup
:fonte
Se você estiver usando o tortoise svn, existe um comando oculto para fazer isso. Segure a tecla shift enquanto clica com o botão direito em uma pasta para abrir o menu de contexto no Windows Explorer. Você receberá um comando "Excluir itens não versionados".
consulte a parte inferior desta página para obter detalhes ou a captura de tela abaixo que destaca os recursos estendidos com as estrelas verdes e aquele de interesse com o retângulo amarelo ...
fonte
O Subversion 1.9.0 introduziu a opção de remover itens não versionados [1]
[1] https://subversion.apache.org/docs/release-notes/1.9.html#svn-cleanup-options
fonte
Minha conversão em C # do script Thomas Watnedals Python:
fonte
Este é um comando shell do Unix para excluir todos os arquivos que não estão sob o controle do Subversion.
Notas:
st
insvn st
é um alias integrado parastatus
, ou seja, o comando é equivalente asvn status
--no-ignore
também inclui arquivos não-repositórios na saída de status, caso contrário, ignora por meio de mecanismos como.cvsignore
etc. - uma vez que o objetivo é ter um ponto de partida limpo para compilações, esta opção é obrigatóriagrep
filtros da saída de modo que apenas os arquivos desconhecidos para o subversion são deixados - as linhas que começam com a?
lista de arquivos desconhecidos para o subversion que seriam ignorados sem a--no-ignore
opçãosed
xargs
comando é instruído via-r
para não executarrm
, quando a lista de argumentos estaria vazia-d '\n'
opção dizxargs
para usar uma nova linha como delimitador de forma que o comando também funcione para nomes de arquivos com espaçosrm -r
é usado no caso de diretórios completos (que não fazem parte do repositório) precisarem ser removidosfonte
Não consegui fazer nenhum dos itens acima funcionar sem dependências adicionais que não queria adicionar ao meu sistema de compilação automatizado no win32. Portanto, reuni os seguintes comandos Ant - observe que eles requerem que o JAR Ant-contrib seja instalado (eu estava usando a versão 1.0b3, a mais recente, com Ant 1.7.0).
Observe que isso exclui todos os arquivos não versionados sem aviso prévio.
Para uma pasta diferente, altere a
${basedir}
referência.fonte
remova o eco se tiver certeza do que deseja fazer.
fonte
/bin/sh
e nrm
processos bifurcados.Já que todo mundo está fazendo isso ...
fonte
Pode muito bem contribuir com outra opção
O /(config|.ini)/ é para meus próprios propósitos.
E pode ser uma boa idéia adicionar --no-ignore ao comando svn
fonte
Eu tropecei em svn-clean na minha máquina RH5. Está localizado em / usr / bin / svn-clean
http://svn.apache.org/repos/asf/subversion/trunk/contrib/client-side/svn-clean
fonte
Solução pura para Windows cmd / bat:
fonte
Tentei a versão de Seth Reno a partir desta resposta, mas não funcionou para mim. Tive 8 caracteres antes do nome do arquivo, não 9 usados em
cut -c9-
.Portanto, esta é minha versão com em
sed
vez decut
:fonte
Se você gosta de PowerShell:
Remova o sinalizador -WhatIf para que o comando realmente execute as exclusões. Caso contrário, ele apenas exibirá o que faria se fosse executado sem o -WhatIf.
fonte
Eu adicionaria isso como um comentário à resposta de Thomas Watnedal , mas ainda não posso.
Um pequeno problema com ele (que não afetará o Windows) é que ele verifica apenas arquivos ou diretórios. Para sistemas tipo Unix onde links simbólicos podem estar presentes, é necessário mudar a linha:
para
para também remover links.
Para mim, mudar a última linha
if match: removeall(match.group(1))
parapara que ele exiba o que está removendo também foi útil.
Dependendo do caso de uso, a
?[\?ID]
parte da expressão regular pode ser melhor?[\?I]
, poisD
também remove arquivos excluídos que estavam sob controle de versão. Quero usar isso para criar uma pasta limpa e com check-in, de modo que não haja arquivos em umD
estado.fonte
@zhoufei Testei sua resposta e aqui está a versão atualizada:
%
marcas na frente de G e H%~1
pode ser usado qualquer nome de diretório, usei isso como uma função em um arquivo bat, então%~1
é o primeiro parâmetro de entradafonte
Se você não quiser escrever nenhum código, svn2.exe de svn2svn faz isso, também há um artigo sobre como ele é implementado. As pastas e arquivos excluídos são colocados na lixeira.
Execute "svn2.exe sync [path]".
fonte
Para as pessoas que gostam de fazer isso com perl em vez de python, shell Unix, java, etc. Aqui, um pequeno script perl que executa o jib também.
Nota: Isso também remove todos os diretórios não versionados
fonte
Usando o TortoiseSVN: * clique com o botão direito na pasta da cópia de trabalho, enquanto mantém a tecla shift pressionada * escolha "deletar itens não versionados"
Como posso deletar todos os arquivos / pastas não versionados / ignorados em minha cópia de trabalho?
fonte
Uma maneira limpa de fazer isso no PERL seria:
fonte
Usei cerca de 3 horas para gerar isso. Demoraria 5 minutos para fazê-lo no Unix. O problema principal era: espaços nos nomes das pastas Win, impossibilidade de editar %% i e problema com a definição de vars no loop cmd do Win.
fonte
O fragmento de código C # acima não funcionou para mim - eu tenho o cliente svn tartaruga e as linhas são formatadas de forma ligeiramente diferente. Aqui está o mesmo fragmento de código acima, apenas reescrito para funcionar e usando regex.
fonte