Eu tenho um diretório de trabalho SVN. Fiz algumas alterações nesse diretório e ele aparece em svn status
. Mas existe alguma maneira de remover todas as minhas alterações e obter tudo do tronco usando a linha de comando?
Eu tenho um diretório de trabalho SVN. Fiz algumas alterações nesse diretório e ele aparece em svn status
. Mas existe alguma maneira de remover todas as minhas alterações e obter tudo do tronco usando a linha de comando?
Respostas:
svn revert -R .
svn up
Isso reverterá recursivamente o diretório atual e tudo o que está abaixo dele e depois será atualizado para a versão mais recente.
Usei uma combinação das respostas de outras pessoas para chegar a esta solução:
svn revert -R .
svn status --no-ignore | grep -E '(^\?)|(^\I)' | sed -e 's/^. *//' | sed -e 's/\(.*\)/"\1"/' | xargs rm -rf
svn update --force
svn revert -R .
svn cleanup . --remove-unversioned
svn cleanup . --remove-ignored
Se você não tiver alterações, poderá sempre ser realmente completo e / ou preguiçoso e fazer ...
rm -rf *
svn update
Mas, na verdade, não faça isso, a menos que você tenha certeza de que a opção nuke-from-space é o que você deseja! Isso tem a vantagem de também remover todas as cruft de compilação, arquivos temporários e coisas que o SVN ignora.
A solução mais correta é usar o comando revert:
svn revert -R .
O -R faz com que o subversion recursione e reverta tudo dentro e abaixo do diretório de trabalho atual.
svn nuke-from-space
Nenhuma das respostas aqui era exatamente o que eu queria. Aqui está o que eu vim com:
# Recursively revert any locally-changed files
svn revert -R .
# Delete any other files in the sandbox (including ignored files),
# being careful to handle files with spaces in the name
svn status --no-ignore | grep '^\?' | \
perl -ne 'print "$1\n" if $_ =~ /^\S+\s+(.*)$/' | \
tr '\n' '\0' | xargs -0 rm -rf
Testado no Linux; pode funcionar no Cygwin, mas conta com (acredito) uma extensão específica do GNU que permite que os xargs se dividam com base no '\0'
espaço em branco e não no espaço em branco.
A vantagem do comando acima é que ele não requer nenhuma atividade de rede para redefinir a sandbox. Você obtém exatamente o que tinha antes e perde todas as alterações . (isenção de responsabilidade antes que alguém me culpe por esse código destruindo seu trabalho) ;-)
Uso esse script em um sistema de integração contínua em que quero garantir que uma compilação limpa seja executada após a execução de alguns testes.
Edit : Não tenho certeza se isso funciona com todas as versões do Subversion. Não está claro se o svn status
comando sempre é formatado de forma consistente. Use por sua conta e risco, como em qualquer comando que use esse rm
comando geral .
Se você estiver no Windows, o seguinte loop for reverterá todas as alterações não confirmadas feitas no seu espaço de trabalho:
for /F "tokens=1,*" %%d in ('svn st') do (
svn revert "%%e"
)
Se você deseja remover todas as alterações não confirmadas e todos os objetos não versionados, serão necessários 2 loops:
for /F "tokens=1,*" %%d in ('svn st') do (
svn revert "%%e"
)
for /F "tokens=1,*" %%d in ('svn st') do (
svn rm --force "%%e"
)