O que devo fazer quando 'svn cleanup' falhar?

245

Tenho muitas alterações em uma pasta de trabalho e algo estragou tudo ao tentar fazer uma atualização.

Agora, quando emito uma 'limpeza svn', recebo:

>svn cleanup .
svn: In directory '.'
svn: Error processing command 'modify-wcprop' in '.'
svn: 'MemPoolTests.cpp' is not under version control

MemPoolTests.cpp é um novo arquivo que outro desenvolvedor adicionou e foi derrubado na atualização. Não existia na minha pasta de trabalho antes.

Existe algo que eu possa fazer para tentar avançar sem precisar fazer check-out de uma nova cópia do repositório?

Esclarecimento: Obrigado pelas sugestões sobre como mudar o diretório e trazer uma nova cópia para baixo. Eu sei que é uma opção, mas é uma que eu gostaria de evitar, pois há muitas alterações aninhadas em vários diretórios (isso deveria ter sido um ramo ...)

Estou esperando uma maneira mais agressiva de fazer a limpeza, talvez de alguma forma forçar o arquivo SVN está tendo problemas para voltar a um estado conhecido (e tentei excluir a cópia de trabalho dele ... isso não ajudou).

Rob Walker
fonte
Re: Usando uma nova cópia. Pegue uma cópia do beyond compare para diferenciar as versões umas das outras
Jon Winstanley
2
A solução de amin não funcionou para você? Certamente uma resposta óbvia para aceitar o contrário?
Alice Purcell #
2
Certifique-se de que nenhum dos arquivos não seja mantido aberto por um aplicativo, é fácil esquecer. O Process Explorer e uma pesquisa rápida no caminho são muito úteis para descobrir isso: technet.microsoft.com/en-us/sysinternals/bb896653.aspx
angularsen
4
IMHO a existência do comando "svn cleanup" é uma admissão de falha.
yoyo

Respostas:

223

Quando começar tudo de novo, não é uma opção ...

Excluí o arquivo de log no .svndiretório (também excluí o arquivo incorreto .svn/props-base), fiz uma limpeza e retomei minha atualização.

Peter Mortensen
fonte
3
Eu estava tendo um problema semelhante à pergunta original aqui (devido a um check-out interrompido do svn). Isso consertou para mim. Embora eu também tivesse que ir até o diretório pai e fazer o mesmo lá.
Nigel Hawkins
2
+1 Não posso dizer quantas vezes estive nessa situação. Quando se trata de uma subpasta, não há problema, basta excluir a pasta inteira, limpar e atualizar. Mas quando é um arquivo no nível raiz, essa não é uma opção barata (várias horas para fazer o check-out de todo o projeto). Dica fantástica - muito obrigado.
Ewan Makepeace
9
Para mim, a exclusão dos arquivos de bloqueio fez isso. Talvez seja do interesse de alguém. Você pode excluí-los recursivamente com o seguinte comando: rm -rffind . -type f -name lock
H6.
1
O comando da happy-coding não funciona. Isso acontece:sudo rm -rf | find . -type f -name lock
Zachary Schuessler
2
Eu não consegui encontrar o que .svn/prop-baseeu tenho.svn/[pristine|tmp|entries|format|wc.db]
bigpony
112

As coisas mudaram com o SVN 1.7, e a solução popular de excluir o arquivo de log no diretório .svn não é viável com a mudança para uma implementação de cópia de trabalho de banco de dados.

Aqui está o que eu fiz que parecia funcionar:

  1. Exclua o diretório .svn da sua cópia de trabalho.
  2. Inicie um novo checkout em um novo diretório temporário.
  3. Cancele a finalização da compra (não queremos esperar que tudo seja encerrado).
  4. Execute uma limpeza neste checkout cancelado.
  5. Agora temos um novo diretório .svn com um banco de dados limpo (embora não haja poucos arquivos)
  6. Copie esse arquivo .svn para o diretório de trabalho antigo e corrompido.
  7. Execute o svn update e ele deve atualizar seu novo diretório .svn parcial com o seu antigo diretório de trabalho.

Isso é um pouco confuso, em termos de processos. Basicamente, o que estamos fazendo é excluir o .svn corrompido e criar um novo .svn para o mesmo caminho de checkout. Em seguida, movemos esse novo .svn para o diretório de trabalho antigo e o atualizamos para o repositório.

Acabei de fazer isso no TSVN e parece funcionar bem e não requer uma verificação e download completos.

-Jody

JKoplo
fonte
8
Eu pareço fazer isso pelo menos duas vezes por mês. Que dor. A equipe svn deve adicionar estas etapas svn cleanup --force. E é claro que todas as operações de adição, exclusão e (com 1.8) renomeação são perdidas.
1937 Martin
2
@Adgezaza Sim. Sim.
precisa
1
isso corrige para mim. É um pouco diferente: após alterar o svn, a atualização falha para 1 pasta específica. Exclua essa pasta e está tudo bem
Hoang Long
@ Filhote, deveria. Basicamente, você está apenas puxando os metadados para um novo checkout e preenchendo-os com arquivos. O SVN determinará se os arquivos correspondem ou não aos metadados. Mas, você sabe, fechar tudo em primeiro lugar apenas no caso ...
JKoplo
1
Reinstalei o SVN (Tortoise SVN 1.8), revisei todas as pastas svn do meu projeto e executei as operações mencionadas aqui e pronto! Graças ao autor!
Dmitry
110

Dê uma olhada

http://www.anujvarma.com/svn-cleanup-failedprevious-operation-has-not-finished-run-cleanup-if-it-was-interrupted/

Resumo da correção do link acima (Agradecimentos a Anuj Varma)

  1. Instale o shell da linha de comando sqlite (sqlite-tools-win32) em http://www.sqlite.org/download.html

  2. sqlite3 .svn/wc.db "select * from work_queue"

O SELECT deve mostrar sua pasta / arquivo ofensivo como parte da fila de trabalho. O que você precisa fazer é excluir este item da fila de trabalho.

  1. sqlite3 .svn/wc.db "delete from work_queue"

É isso aí. Agora, você pode executar a limpeza novamente - e deve funcionar. Ou você pode prosseguir diretamente para a tarefa que estava realizando antes de ser solicitado a executar a limpeza (adicionando um novo arquivo etc.)

Siva
fonte
Observe que as respostas somente para links são desencorajadas; as respostas SO devem ser o ponto final de uma pesquisa por uma solução (em comparação com outra parada de referências, que tendem a ficar obsoletas ao longo do tempo). Considere adicionar aqui uma sinopse independente, mantendo o link como referência.
22414 kleopatra
8
O Firefox possui a extensão sqlite manager que pode abrir e editar o arquivo .svn / wc.db. Fornece uma GUI conveniente para executar operações equivalentes no work_queue.
Magicianeer
Se você possui uma versão recente do SVN e Firefox, o add-in do sqlite manager resolve esse problema em 30 segundos. Não se preocupe em excluir diretórios ou usar o Repobrowser. Em 2016 eu acho que isso deve ser a resposta aceita
Arbit
5
Para mim, executando 'delete from WC_LOCK;' também é necessário.
precisa saber é o seguinte
Funciona perfeitamente! Svn é uma merda! Mas, depois de exclusão de work_queue svn dar-me um outro erro "svn bloqueado", basta executar com tartaruga (eclipse não tem a opção) limpar com "bloqueios quebrar" marcada
amdev
42

Se todo o resto falhar:

  1. Confira em uma nova pasta.
  2. Copie seus arquivos modificados.
  3. Verifique novamente.
  4. Coloque a pasta antiga em algum lugar (você nunca sabe que a paranóia é boa) antes de excluí-la e usar a nova.
Martin Beckett
fonte
27

A versão mais recente (estou usando o 1.9.5) resolve esse problema adicionando uma opção de "Quebrar bloqueios" no menu de limpeza. Apenas verifique se esta caixa de seleção está marcada ao fazer a limpeza.

janela para cima

Tao
fonte
Parece tão óbvio agora! Obrigado
Billy Jake O'Connor
Trabalhou como um encanto!
Viswanath
Funciona bem para mim.
Sergey
Trabalhou! Quando vi essa solução, soube imediatamente qual era o problema ... (acho): eu ainda tinha um excel aberto, o que o modifica. Eu queria confirmar minhas alterações em alguns arquivos java e vi o arquivo do Excel e fiquei tipo "Eu não mudei nada lá ... reverter". O que não funcionou, então eu percebi que ainda estava aberto, fechei, F5, não apareceu mais no commit, então prossiga para o commit. E então me diz "pls run cleanup" e a partir daí eu fiquei preso. Então, obrigado! :)
BAERUS 18/04/19
16

Esta resposta se aplica apenas a versões anteriores à 1.7 (obrigado @ ŁukaszBachman) .

O Subversion armazena suas informações por pasta (em .svn), portanto, se você está apenas lidando com uma subpasta, não precisa fazer check-out de todo o repositório - apenas a pasta que funcionou:

cd dir_above_borked
mv borked_dir borked_dir.bak
svn update borked_dir

Isso fornecerá uma boa cópia de trabalho da pasta borked, mas você ainda terá as alterações em borked_dir.bak. O mesmo princípio se aplica ao Windows / TortoiseSVN.

Se você tiver alterações em uma pasta isolada, consulte o

svn checkout -N borked_dir   # Non-recursive, but deprecated

ou

svn checkout --depth=files borked_dir
# 'depth' is new territory to me, but do 'svn help checkout'
Ken
fonte
quantidade enorme salva de tempo usando sua sugestão "se você está apenas lidando com uma subpasta você não precisa fazer o checkout todo o repositório"
iBabur
Isso funcionou para mim - tudo o que fiz foi svn upo mesmo repo que estava no meio de uma svn upaba diferente - esqueci que tinha feito isso e o deixei incompleto na noite anterior.
Jon z
Não é mais verdade - com a versão mais recente, o SVN agora está usando apenas um .svndiretório.
ŁukaszBachman
9
$ ls -la .svn
$ rm -f .svn/lock

Então

$ svn update

Espero que ajude

ingestado
fonte
6

Eu tive o mesmo problema. Eu não poderia confirmar, e a limpeza falharia.

Usando um cliente de linha de comando, pude ver uma mensagem de erro indicando que estava falhando ao mover um arquivo de .svn/propspara .svn/prop-base.

Olhei para o arquivo específico e descobri que estava marcado como somente leitura. Após remover o atributo somente leitura, consegui limpar a pasta e confirmar minhas alterações.

DanJ
fonte
Desisti dessa árvore e recebi uma nova no final. Mas obrigado pela dica de algo para verificar na próxima vez.
Rob Walker
ha ... eu mesmo renomeado as pastas .svn \ intocada área de de {name} para {name} _old e depois voltar para o original {name} e funcionou
beauXjames
5

É possível que você tenha um problema com dois nomes de arquivos diferentes apenas em maiúsculas. Se você encontrou esse problema, a criação de outro diretório de cópias de trabalho não resolve o problema.

Os sistemas de arquivos atuais do Windows (ou seja, ruins) simplesmente não refletem a diferença entre Filenamee FILEname. Você tem duas correções possíveis:

  1. Confira na plataforma com um sistema de arquivos real (baseado em Unix), renomeie o arquivo e confirme as alterações.
  2. Quando você está estocado para o Windows, pode renomear arquivos no navegador de repositório Eclipse SVN, que reconhece a diferença e renomeia o arquivo lá.
  3. Você pode renomear os arquivos problemáticos também remotamente a partir de qualquer cliente SVN da linha de comando usando svn rename -m "broken filename case" http://server/repo/FILEname http://server/repo/filename
andrej
fonte
Este acabou sendo o meu problema; de alguma forma, um colega de trabalho conseguiu fazer o check-in de vários arquivos de projeto do Xcode, cada um com duas cópias que diferem apenas em letras maiúsculas. Usei o TortoiseSVN para navegar no repositório e excluir os arquivos extras. Em seguida, apaguei minhas pastas locais contendo os arquivos duplicados e o svn update finalmente conseguiu.
kgriffs
Não é apenas um problema do Windows. Isso também afeta os Macs também. Os sistemas de arquivos Macs HFS +, por padrão, também diferenciam maiúsculas de minúsculas, mas preservam os nomes dos arquivos. Eu configurei uma segunda partição no meu disco rígido que faz nomes de arquivos que diferenciam maiúsculas de minúsculas para contornar esses problemas.
David W.
4

Execute o svn cleanupcomando em um terminal (se houver falha no Eclipse, que foi o meu caso):

~/path/to/svn-folder/$ svn cleanup

Tentei soluções diferentes explicadas aqui, mas nenhuma funcionou .

Equipe de ação → Falha na atualização da cabeça :

svn: E155004: Existem itens de trabalho inacabados em '/ home / user / path / to / svn-folder'; execute 'svn cleanup' primeiro.

Equipe de ação → A limpeza falha com o mesmo erro.

Solução que funcionou para mim: execute o comando svn cleanup em um terminal .

O comando foi bem sucedido.

Em seguida, a equipeAtualização no Eclipse funcionou novamente.

Nota: minha versão do SVN é 1.9.3.

Verifique também a resposta de Chris se svn cleanupnão funcionar.

el-teedee
fonte
3

Eu tentei fazer svn cleanupatravés do console e recebi um erro como:

svn: E720002: Can't open file '..\.svn\pristine\40\40d53d69871f4ff622a3fbb939b6a79932dc7cd4.svn-base':
The system cannot find the file specified.

Então, eu criei este arquivo manualmente (vazio) e o fiz svn cleanupnovamente. Desta vez, foi feito OK.

Nikita Bosik
fonte
3

Eu tive o mesmo problema. Para mim, a causa foi um conflito com o EasySVN e (TortoiseSVN ou apenas SVN). Eu tive atualização automática e confirmação com o EasySVN (que não estava funcionando).

Quando desliguei, não consegui limpar, confirmar ou atualizar. Nenhuma das soluções acima funcionou, mas a reinicialização funcionou :)

jimi
fonte
Yaaaaay jimi, você é meu herói (in).
TRoa 09/07/19
2

Eu apenas tive esse mesmo problema no Windows 7 de 64 bits. Executei o console como administrador e excluí o diretório .svn do diretório do problema (ocorreu um erro sobre logs ou algo assim, mas o ignorei). Em seguida, no explorer, excluí o diretório do problema que não estava mais aparecendo como sob controle de versão. Em seguida, executei uma atualização e as coisas prosseguiram conforme o esperado.

Carnix
fonte
2

Se o problema for a distinção entre maiúsculas e minúsculas (que pode ser um problema ao fazer check-out em um Mac e no Windows) e você não tiver a opção de fazer check-out em um sistema * nix, o seguinte deve funcionar. Aqui está o processo desde o início:

% svn co http://[domain]/svn/mortgages mortgages

(O checkout segue ... então ...)

svn: In directory 'mortgages/trunk/images/rates'
svn: Can't open file 'mortgages/trunk/images/rates/.svn/tmp/text-base/Header_3_nobookmark.gif.svn-base': No such file or directory

Aqui, o SVN está tentando verificar dois arquivos com nomes semelhantes que diferem apenas entre maiúsculas Header_3_noBookmark.gife minúsculas - e Header_3_nobookmark.gif. Os sistemas de arquivos Mac são padrão para não diferenciar maiúsculas de minúsculas de uma maneira que faz com que o SVN se engasgue em situações como essa. Assim...

% cd mortgages/trunk/images/rates/
% svn up
svn: Working copy '.' locked
svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)

No entanto, correr svn cleanupnão funciona, como sabemos.

% svn cleanup
svn: In directory '.'
svn: Error processing command 'modify-wcprop' in '.'
svn: 'spacer.gif' is not under version control

spacer.gifnão é o problema aqui… Simplesmente não pode passar do erro anterior para o próximo arquivo. Portanto, excluí todos os arquivos do diretório que não sejam .svne removi o log SVN. Isso fez a limpeza funcionar, para que eu pudesse fazer check-out e renomear o arquivo incorreto.

% rm *; rm -rf .svn/log; svn cleanup
% svn up Header_3_nobookmark.gif
A    Header_3_nobookmark.gif
Updated to revision 1087.
% svn mv Header_3_nobookmark.gif foo
A         foo
D         Header_3_nobookmark.gif
% svn up
A    spacer.gif
A    Header_3_noBookmark.gif

Depois disso, consegui voltar ao diretório raiz do projeto e executar o svn upcheck-out.

Chris Wade
fonte
2

Sempre que tenho problemas semelhantes, uso o rsync (NB: uso Linux ou Mac OS X) para ajudar da seguinte forma:

# Go to the parent directory
cd dir_above_borked

# Rename corrupted directory
mv borked_dir borked_dir.bak

# Checkout a fresh copy
svn checkout svn://... borked_dir

# Copy the modified files to the fresh checkout
# - test rsync
#   (possibly use -c to verify all content and show only actually changed files)
rsync -nav --exclude=.svn borked_dir.bak/ borked_dir/

# - If all ok, run rsync for real
#   (possibly using -c again, possibly not using -v)
rsync -av --exclude=.svn borked_dir.bak/ borked_dir/

Dessa forma, você terá um novo checkout, mas com os mesmos arquivos de trabalho. Para mim, isso sempre funciona como um encanto.

Magentron
fonte
2

Eu me deparei com isso ultimamente. O truque para mim foi depois de selecionar "Limpar", na caixa de diálogo de opções pop-up, marque "Break Locks" e depois "OK". Limpou com sucesso para mim.

Pei Yang
fonte
1
O SVN não possui uma caixa de diálogo pop-up; talvez você esteja usando o Tortoise. O OP está usando o cliente de linha de comando; portanto, seu aconselhamento não é muito útil.
Robert
1

O Subclipse fica confuso com o comportamento de bloqueio verdadeiramente diabólico do Windows. Unlocker é seu amigo. Isso pode encontrar arquivos bloqueados e liberar à força os bloqueios.

Peter Moffatt
fonte
1

(Antes de tentar mover pastas e fazer um novo checkout.)

Exclua a pasta em que os arquivos incorretos estão - sim, até a .svnpasta e faça uma svn cleanupna pasta superior / principal.

Judy K
fonte
1

Eu enfrentei o mesmo problema. Após algumas pesquisas na Internet, encontrei o artigo abaixo . Então percebi que estava logado como um usuário diferente do usuário em que havia usado para configurar o SVN, basicamente uma questão de permissão.

user_v
fonte
1

Quando enfrento esse problema com o TortoiseSVN (Windows), vou ao Cygwin e executo a ' limpeza do svn '; ele limpa corretamente para mim, após o qual tudo funciona no TortoiseSVN.

Aqura
fonte
Isso também funciona com uma janela cmd. Não sei por que funciona quando o Tortoise falha, mas às vezes funciona.
Watusimoto 2/16/16
0

As respostas aqui não me ajudaram, mas antes de verificar o projeto novamente, fechei e abri o Eclipse (Subversive é meu cliente SVN) e o problema desapareceu.

Crag
fonte
0

Pode não ser aplicável em todas as situações, mas quando eu encontrei esse problema recentemente, minha "correção" era atualizar o pacote Subversion no meu sistema. Eu estava executando o 1.4.algo e, quando atualizei para o mais recente (1.6.6 no meu caso), o check-out funcionou.

(Tentei fazer o download novamente, mas um checkout para um diretório limpo sempre ficava no mesmo local.)

dan_linder
fonte
0

Às vezes, o bloqueio somente leitura acontece em unidades de rede com o Windows. Tente desconectar e reconectar novamente. Em seguida, limpe e atualize.

Artjom Kurapov
fonte
0

Depois de analisar a maioria das soluções citadas aqui, eu ainda estava recebendo o erro.

A questão era insensível caso OS X . O check-out de um diretório que possui dois arquivos com o mesmo nome, mas com letras maiúsculas diferentes causa um problema. Por exemplo, ApproximationTest.java e Approximationtest.java não devem estar no mesmo diretório. Assim que nos livramos de um dos arquivos, o problema desaparece.

Shilpa
fonte
0

Eu encontrei um problema em que, após uma atualização, o SVN mostrava uma pasta como conflitada. Estranhamente, isso só era visível através da linha de comando - o TortoiseSVN achou que estava tudo bem.

#>svn st
!       my_dir
!       my_dir\sub_dir

svn cleanup, svn revert, svn updateE svn resolveeram todos bem sucedida no que fixa esta.

Acabei por resolver o problema da seguinte forma:

  • Procure no diretório .svn "sub_dir"
  • Use RC -> Propriedades para desmarcar o sinalizador 'somente leitura' no arquivo de entradas
  • Abra o arquivo de entradas e exclua a linha "inacabado ..." e a soma de verificação correspondente
  • Salvar e reativar o sinalizador somente leitura
  • Repita para o diretório my_dir

Depois disso, estava tudo bem.

Observe que eu não tive nenhuma alteração local; portanto, não sei se você estaria em risco. Eu não usei o método delete / update sugerido por outras pessoas - entrei nesse estado tentando isso no diretório my_dir / sub_dir / sub_sub_dir (que começou com os mesmos sintomas) - então não queria me arriscar a piorar as coisas novamente!

Não é exatamente um tópico, mas talvez seja útil se alguém se deparar com este post como eu.

sam
fonte
0

Não não não! Se você estiver usando o SVN 1.7 ou superior, o comando cleanup deve fazer o trabalho!

Também fiz alguns experimentos e descobri que a solução (pelo menos no Eclipse ) estava executando a limpeza apenas para a pasta especificada na mensagem de erro e não para o projeto inteiro!

Laura Liparulo
fonte
Isso funcionou para mim hoje, então vou marcar com +1. Por outro lado, outra vez que entrei em loop foi exatamente o oposto - estava clicando com o botão direito do mouse em uma pasta e escolhendo "limpeza" quando precisava clicar com o botão direito do mouse em um espaço em branco. Portanto, depende muito da situação específica.
Daphne B
downvote porque a resposta à pergunta "como faço para corrigir as coisas quando limpeza svn falha" não é "deve funcionar"
MJS
0

eu fiz sudo chmod 777 -R . para poder alterar as permissões. Sem sudo, não funcionaria, me dando o mesmo erro que executar outros comandos.

Agora você pode fazer o que svn updatefor, sem ter que desfazer o diretório inteiro e recriá-lo. Isso é especialmente útil, pois seu IDE ou editor de texto já pode ter certas guias abertas ou problemas de sincronização. Você não precisa descartar e substituir seu diretório de trabalho por esse método.

ahnbizcad
fonte
0

Resolvi esse problema copiando o diretório .svn de um colega no meu e atualizando minha cópia de trabalho. Foi uma solução agradável, rápida e limpa.

bigpony
fonte
0

Existem algumas sugestões muito boas na resposta anterior, mas se você estiver tendo problemas com o TortoiseSVN no Windows (um bom produto, mas ...) sempre faça o fallback para a linha de comando e faça uma "limpeza svn" simples primeiro.

Em muitas circunstâncias, o cliente Windows não executará o comando cleanup, mas a limpeza funciona bem usando o utilitário de linha de comando SVN.

paul.da.programmer
fonte
0

Enquanto enfrentava um problema semelhante, a mesclagem manual na exibição de sincronização do repositório ajudou a resolver o problema.

Um nome de arquivo estava em conflito com outro e mencionava claramente o problema. Renomear o arquivo mais recente para um nome diferente o resolveu.

dev
fonte