O Subversion travou devido a “operação anterior não terminou”?


229

Se eu tentar atualizar meu repositório do subversion, ele deverá executar a limpeza. Se eu executar a limpeza, ele diz que está faltando um arquivo. (Excluí um diretório MASSIVO de arquivos que não foram confirmados esta manhã do meu PC em casa, mas depois comprometo o mesmo conjunto de arquivos do trabalho e agora o repositório doméstico está quebrado). Então, a limpeza diz:

Falha na limpeza do processo blablabla Não é possível definir o arquivo blablabla leitura / gravação: O sistema não pode encontrar o arquivo especificado.

Se eu atualizar, diz:

Comando: Erro de atualização: a operação anterior não foi concluída; execute 'limpeza' se foi interrompido Erro: Execute o comando 'Limpeza'. Concluído !:

Como faço para soltar isso?


(diferente de apagar todas as informações SVN, e re-check-out)
coderama

3
esse erro irritante é por que eu odeio svn. Cada vez que enfrento isso, tenho que fazer check-out novamente porque a limpeza da pasta raiz ou da pasta pai não funciona. Mas o maior problema é que ele não exibir sobreposição de ícones na época, então eu não sei qual arquivo foi alterado para o backup antes de verificar
phuclv

A mensagem por @ sigurd-v é a verdadeira resposta para a pergunta que eu e muitos outros ajudaram: stackoverflow.com/a/22717607/5613292
Mehdi Javan

Respostas:


102

Eu já estive em situações semelhantes. Você já tentou executar a limpeza a partir da raiz do seu espaço de trabalho? Sei que às vezes uma limpeza de um diretório filho (onde está o problema) não funciona e a limpeza da raiz do espaço de trabalho.

Se isso ainda falhar, desde que você excluiu um diretório filho em algum lugar. Tente excluir 1 nível mais alto do diretório filho (supondo que não seja a raiz) e tente novamente a atualização e a limpeza.

Se as tentativas de limpeza não tiverem êxito em nenhum nível, infelizmente a resposta está fazendo o check-out de uma nova cópia de trabalho.


4
para limpar do dir filho! Funciona para mim!
Franva

1
Se você está lendo isso, está com problemas :) Nunca encontrei tanta confusão com o Git (até agora). Acabei limpando / revertendo / limpando etc. em qualquer diretório que eu pudesse, se o Svn me permitisse.
aliopi

2
A mensagem por @ sigurd-v é a verdadeira resposta para a pergunta que eu e muitos outros ajudaram: stackoverflow.com/a/22717607/5613292
Mehdi Javan

Eu executei a Limpeza no Windows FileExplorer (com Turtoise) e isso me deu um erro mais elaborado, que me disse qual era o arquivo com o problema, de alguma forma o SVN perdeu esse arquivo, um arquivo darm * .cache, então peguei outro .cache e renomeie-o para substituir o arquivo ausente, execute a limpeza, sem erros dessa vez, TUDO CORRIGIDO !!
Jhollman

331

Geralmente, não há necessidade de um novo checkout ou cópia.

Acabei de resolver um problema semelhante relacionado ao erro "a operação anterior não foi concluída" com a ajuda deste ( Link )

Parece que o svn às vezes fica preso ao processar comandos / operações. Todas essas operações são armazenadas no arquivo de banco de dados wc.db na pasta .svn.

Fazendo o download do SQLite para o meu diretório de checkout e executando

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

você pode obter uma lista de todas as operações pendentes. Essas operações são as que o erro está se referindo como "não concluído".

Correndo

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

todas as operações antigas são excluídas da fila de trabalho e o erro desaparece. Não há necessidade de um novo checkout ou qualquer coisa


5
Você deve sempre tentar executar a limpeza antes de tentar a solução acima. Isso funciona se você deseja colocar um repositório SVN parado e funcionando sem precisar fazer check-out de uma nova cópia de trabalho.
Sigurd V

7
Baixando SQLITE.EXE e executar o delete foi realmente mais rápido do que o check-out e fundindo - grande resposta
Jeffrey Cavaleiro

12
Também obtive um "bloqueio" depois disso, mas superei-o com uma "limpeza de svn"
Jeffrey Knight

1
Eu executei isso no Debian, instale usando o apt-get install sqlite3 e execute os comandos acima sem o .exe
Richard Merchant

3
I obteve o 'bloqueado' mensagem bem, mas então eu corri o comando 'Clean Up' marcando a caixa que diz "breaks bloqueia", e funcionou
McCoy

114

O console em execução svn cleanupresolveu o mesmo problema para mim.


20
O comando console svn cleanuptambém fornecerá informações mais detalhadas do que o uso do plug-in Tortoise Explorer, o que o torna muito útil em situações como esta.
Brandon S

7
A execução do comando do console provavelmente fornecerá informações suficientes para resolver o problema. Esta é uma resposta muito melhor.
DDS

1
Bem, eu selecionou a pasta mais alto e usado svn cleanup, graças
deadfish

Muitas vezes tive sucesso ao percorrer diretórios-pai e executar limpeza neles, mas é um pouco demorado e 'mágico'. Nunca soube que isso retornaria um erro detalhado, +1.
Phil Cooper

Ao executar svn cleanup, verifique se o console está elevado. Não fiz isso inicialmente e recebi o red-write: Access is deniederro.
Tony

26

Eu apenas tive um problema semelhante. A execução do Process Explorer mostrou que outro programa (Notepad ++) tinha um identificador de arquivo em uma pasta que o SVN tentou excluir. Quando fechei o Notepad ++, o "Clean Up" foi executado com êxito.


Isso poderia produzir o problema mencionado na pergunta. Mas receio que não possa liquidá-lo se já aconteceu.
Gangnus

19

Eu estava enfrentando esse problema depois de adicionar um jar que já está no SVN e adicionei a nova versão com o mesmo nome.

No Eclipse, tentei isso

  1. Clique com o botão direito do mouse na pasta> Equipe> Atualizar / Limpar.
  2. Limpe, construa e atualize meu aplicativo.
  3. Reinicie o Eclipse.

Usando as etapas acima, sou capaz de sincronizar.


1
Trabalhou para mim. Apenas, a terceira etapa não é obrigatória (reinicie o Eclipse).
precisa saber é

Isso funcionou para mim também, tentei muitas coisas, mas não funcionou. Fechei meu estúdio visual e fiz a limpeza. muito obrigado
AhammadaliPK

18

Eu tentei as respostas mais votadas aqui e algumas outras sem sucesso. Minha WORK_QUEUEmesa estava vazia e não consegui fazer uma limpeza em uma pasta mais alta. O que funcionou foi o seguinte (isso é via Tortoise SVN);

  • Clique com o botão direito na pasta
  • Vá para TortoiseSVN -> Limpar ...
  • Verifique se a opção to Break Locksestá marcada e clique em OK

A operação de limpeza agora é concluída com êxito e eu posso continuar. Não é necessário fazer o download do sqlite3 ou de outras soluções complicadas.


2
Quebrar bloqueios não faz o que eu pensava. Ele quebra apenas os bloqueios locais que ele usa no seu sistema. Não bloqueia que outra pessoa tenha definido.
Brian Carlton

1
Às vezes, o sqlite3 resolveu meu problema, mas esse método era muito difícil de lembrar e a limpeza falhou com tanta frequência. Este método me salvou ..
sc

9

Tentar executar a limpeza enquanto seus arquivos estão abertos me deu problemas. assim que fechei meu aplicativo (Visual studio), executei a limpeza e foi bem-sucedido


1
Verdade. Verifique se os arquivos não estão em uso ou fizeram check-out como um usuário diferente, como administrador no Windows.
Froggythefrog

6

Eu uso tartaruga SVN. Quando a limpeza falhou, marque a opção de limpeza

Verifique se a opção Quebrar bloqueios está marcada.

Etapa de limpeza

  • botão esquerdo do mouse na pasta explorar
  • selecione 'Tortoise SVN' -> menu 'Limpar ...'
  • marque ' Break Locks ' marcado e pressione 'ok'

Ele já respondeu, mas às vezes a imagem ajuda

insira a descrição da imagem aqui


4

Eu tive o mesmo problema, no meu caso eu estava usando svn tortoise com o aplicativo que eu quis dizer. Usando o cmd shell do windows no modo raiz, apliquei o svn cleanup e o svn update .... Então você pode retornar ao modo de aplicativo e ele funcionará perfeitamente!


2

Tentei remover a pasta .svn para outro local e coloquei-a novamente na mesma pasta raiz. Depois, quando tentei atualizar o SVN, ele foi atualizado. Não sei exatamente como funcionou.


2

Eu tive o mesmo problema e, de alguma forma, descobri que tinha um arquivo .svn oculto no nível c: \. Depois de excluir essa pasta oculta (.svn), tudo funcionou bem. Devo ter criado acidentalmente um diretório de trabalho na unidade raiz.


2

No meu caso, eu tinha um relógio de gole que causava os problemas. Depois de pará-lo, eu poderia executar o comando Cleanup.


Isso me ajudou a matar uma JVM indesejada e o progresso.
Dish

2

oi pessoal nos meus casos depois de fechar o Visual Studio e tentar novamente o CleanUp, ele funciona


2

Eu também fiquei com o mesmo problema que tentei golpe:

1.Tente matar o processo relacionado ao svn, por exemplo, TSVNCache.exe e TortoiseProc 2.Revertendo os arquivos não-versionados e excluindo os mesmos, que eu tenho no svn. 3.cleanup usando o prompt de comando "svn cleanup"

e finalmente quando reiniciou a área de trabalho funcionou para mim, então, para reiniciar o sistema funcionou para mim


1

exclua o svn da pasta principal e substitua-o por outra cópia viável que você possui de elsewere.and update. A pasta svn será normalmente uma pasta oculta. Portanto, certifique-se de reexibir a pasta antes de executar as etapas acima.


1

Solução alternativa que funcionou para mim:

  1. Recorte o conteúdo do seu diretório e copie-o para outra pasta.
  2. Execute a limpeza na linha de comando na pasta vazia.
  3. Copie os arquivos de volta na pasta original.

Feito, mas não posso explicar por que isso acontece. Se você não remover os arquivos, o comando cleanup diz que ele não pode ler / gravar esses arquivos.


1

Eu tive o mesmo problema, o que funcionou para mim:

  1. Copie suas pastas e arquivos para outro local, digamos para uma pasta (alterei meus arquivos recentemente e o compromisso falhou e levou ao problema solucionado)
  2. confira uma nova cópia de trabalho
  3. copie os arquivos alterados da pasta para a sua cópia de trabalho e substitua os arquivos existentes. A confirmação / atualização deve funcionar agora

1

Ocorreu um erro como "Não é possível alterar as permissões do arquivo '/Users/Code/UnitTest.cpp': esse arquivo ou diretório não existe". A subversão está confusa sobre um arquivo que não está mais lá. Eu simplesmente fiz algo como "echo ABCD >> /Users/Code/UnitTest.cpp" para criar uma cópia do arquivo e, em seguida, limpar. Funcionou.


1

No meu caso, o erro apareceu ao tentar confirmar a partir de um IDE. Quando executei a confirmação dos mesmos diretórios com o TortoiseSVN no explorer, a operação foi bem-sucedida.


1

Isso aconteceu comigo ao usar recursos externos e um deles estava corrompido. Eu tive que ir para essa pasta e fazer uma limpeza. A limpeza funcionou durante toda a cópia de trabalho.

Exemplo: Usando externo ^/widgets/foo common/foo-widget, primeiro execute a limpeza na pasta common/foo-widget.


1

Resolvi esse erro hoje quando ocorreu ao tentar confirmar com o SVN. O erro foi genuíno, o TortoiseSVN não pôde acessar um arquivo que eu tentei confirmar. Este arquivo foi salvo durante a execução de um programa "Como administrador" no Windows. Isso significa que o arquivo tem acesso de administrador, mas não da minha conta (o TortoiseSVN é executado como usuário interativo). Eu assumi a propriedade do arquivo indicado na minha conta do Windows e, depois disso, a Limpeza pôde prosseguir.


0

Inicialmente, tive esse problema ao tentar fazer o check-in com o TortoiseSVN. Inicialmente, a limpeza do TortoiseSVN e a limpeza do console svn falharam com mensagens semelhantes às do pôster original.

Mas minha solução (descoberta acidentalmente) foi apenas esperar alguns minutos. Estou pensando que o TSVNCache estava mantendo alguns desses arquivos no momento do check-in.


0

siga as etapas abaixo.

1) Vá para o diretório em que você não pode limpar com êxito via svn(pasta raiz ou pasta filho).

2) Selecione a .svnpasta no diretório, recorte-a e cole-a na unidade ou no local separado (fora do diretório svn)

3) Agora, volte ao diretório - clique com o botão direito e selecione TortoiseSVN -->Repo-browser

4) Checkouta pasta (não será efetuada uma nova verificação geral).

5) Todos os seus itens serão versionados novamente, e isso corrigirá o problema interno do svn, e o problema deve ser resolvido.


SOMENTE execute a verificação completa. qualquer ajuda ?
precisa saber é

0

No meu caso, uma instância de Java Virtual Machine em segundo plano estava sendo executada, matando a limpeza com êxito.


0

Eu peguei a pasta .svn do meu colega desenvolvedor e substituí a minha pasta .svn por essa. Funcionou para mim. Não sei o que pode ser outras consequências!


0

Usando este link, https://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-dug-cleanup.html

Notei que o tutorial tinha as 6 principais opções marcadas. Desesperado, tentei usar aquelas caixas marcadas e, para minha surpresa, funcionou. Certifique-se de ler atentamente o que cada um faz. Olhando para a descrição de cada uma, elas pareciam seguras incluir para mim, então um desses itens verificados parecia ter corrigido qualquer problema que estivesse me impedindo.


0

Isso pode acontecer quando você ainda possui arquivos abertos ao tentar alternar / limpar o SVN.

Eu tinha uma ramificação onde havia criado um novo arquivo, que havia aberto em outro aplicativo. A mudança para outra ramificação não pôde remover o arquivo causando falha na troca. Isso também estava causando osvn cleanup falha, no entanto, isso não é exibido como o motivo na interface do usuário do Tortoise SVN.

Executar a svn cleanuppartir de uma janela do console (na pasta raiz) mostra claramente o errofile\location\file.ext: The process cannot access the file because it is being used by another process

Fechar qualquer identificador de arquivo aberto / windows e executar o console svn cleanuppermite que a limpeza funcione corretamente.

Longa história - execute svn cleanupno console para ver um erro mais detalhado.


0

Além da resposta do Sigurd V (você deve tentar isso primeiro), algumas bases de código maiores têm várias pastas '.svn' e não é necessariamente aquela no diretório raiz que possui a tarefa bloqueada.

Se for esse o caso, você deve verificar cada um. Se você já possui SQLite e Powershell, pode localizar o diretório incorreto rapidamente.

Para descobrir quais pastas estão bloqueadas, execute (substituindo path\to\sqlite.exe):

Get-ChildItem -Path . -Filter '.svn' -Recurse -Hidden | foreach { $toFind = $_.FullName + "\wc.db" ; gci $toFind | foreach { echo $_.FullName ; path\to\sqlite.exe $_.FullName "select * from work_queue" } }.

Isso fornece uma lista dos diretórios .svn e, abaixo de cada um, uma lista das tarefas atuais.

Se houver algum com tarefas inacabadas, para cada uma delas execute (substituindo path\to\sqlite.exee path\to\.svn\wc.db):

path\to\sqlite.exe path\to\.svn\wc.db "delete from work_queue"


0

Eu já vi vários problemas com svn, incluindo este, resolvidos com a exclusão / criação de um .svn/tmpdiretório. Então corrasvn cleanup


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.