A cópia de trabalho XXX bloqueada e a limpeza falharam no SVN

582

Eu recebo esse erro quando faço um svn update:

Cópia de trabalho XXXXXXXX bloqueada Por favor, execute o comando "Limpeza"

Quando executo a limpeza, recebo

A limpeza falhou ao processar os seguintes caminhos: XXXXXXXX

Como saio desse loop?

Dan
fonte
5
Também recebi esta mensagem. As respostas fornecidas pareceram um pouco tediosas (especialmente a mais votada). Acabei de fechar o VS e reaproveitei a solução e pude verificar tudo corretamente.
Oscilatingcretin
Após o comentário do eakkas para excluir entradas da tabela WORK_QUEUE, o SQLLite Manager do Firefox corrigiu o problema para mim.
Zeppelin
12
Há uma resposta simples, basta marcar a opção "quebrar bloqueios" e isso limpará sua cópia de trabalho
Farhan

Respostas:

517

Uma abordagem seria:

  1. Copie itens editados para outro local.
  2. Exclua a pasta que contém o caminho do problema.
  3. Atualize a pasta que contém através do Subversion.
  4. Copie seus arquivos de volta ou mescle as alterações conforme necessário.
  5. Confirmar

Outra opção seria excluir a pasta de nível superior e fazer check-out novamente. Espero que não chegue a isso embora.

Chuck
fonte
123
+1 para você nesta solução alternativa para corrigir não apenas o problema do OP (e o meu), mas também por fornecer as 5 etapas que parecem corrigir qualquer problema svn. -1 para o subversion para as soluções alternativas necessárias.
Pxl
34
Enquanto isso tecnicamente funciona, é uma maneira tão ruim de fazer isso em comparação à remoção dos bloqueios que merece um voto negativo.
Jukka Dahlbom
8
Não consigo executar a etapa 3 porque ... "A cópia de trabalho já está bloqueada"
Evgeny 28/03
20
Considere o conselho de BradS "Para mim, o truque era executar 'svn cleanup' na parte superior da minha cópia de trabalho, não na pasta em que eu trabalhava o tempo todo antes que o problema ocorresse."
Marco
5
Para aqueles que usam o Tortoise SVN, você pode executar a limpeza na pasta raiz do diretório de check-out e forçar interrupções. Além disso, você pode pedir para excluir arquivos não versionados. Então faça uma atualização.
Obaid
476

Para mim, o truque era executar svn cleanupna parte superior da minha cópia de trabalho, não na pasta em que eu trabalhava o tempo todo antes que o problema ocorresse.

BradS
fonte
geralmente funciona, mas não mais, não tenho certeza se é porque eu atualizado para o SVN 1,7
Populus
4
Isso funcionou para mim com um cliente em execução 1.7, embora o servidor ainda é 1.6.x
Mark Hosang
Trabalhou para mim em 1.7 muito apreciada
Scarpacci
1
Combinei a dica da resposta do Intu com a seguinte: procure a pasta pai que possui um arquivo "lock" na pasta .svn e execute "svn cleanup". Isso funcionou para mim.
precisa saber é
5
Isso funciona para mim, de maneira muito mais rápida que a de Chuck. Portanto, vale a pena tentar fazer isso primeiro.
Goamn
210

Procure na sua .svnpasta, haverá um arquivo nela chamado lock. Exclua esse arquivo e você poderá atualizar. Pode haver mais arquivos de bloqueio no .svndiretório de cada subdiretório. Eles precisarão ser excluídos também. Isso pode ser feito como um lote simplesmente na linha de comando, por exemplo

find . -name 'lock' -exec rm -v {} \;

Observe que você está editando arquivos manualmente na .svnpasta. Eles foram colocados lá por uma razão. Esse motivo pode ser um erro, mas se não, você pode danificar sua cópia local.

FONTE: http://www.svnforum.org/2017/viewtopic.php?p=6068

Intu
fonte
8
+1 Acho que essa é uma abordagem muito melhor do que a resposta atualmente mais votada - eu odeio ter que copiar os arquivos em outro lugar primeiro para contornar esse problema (comum!). O meu foi causado por uma ferramenta de geração de código que gerava arquivos com o mesmo nome que outra pessoa já havia adicionado ao SVN. Meu mal por não "svn up" primeiro eu suponho ...
alpian
44
Isso não funciona mais com o Tortoise / SVN 1.7 (ou pelo menos não consegui encontrar nenhum arquivo de bloqueio, pois agora há um banco de dados centralizado com os metadados).
pesche
10
aqui está uma rápida linha única que deve excluir recursivamente todos os bloqueios iniciados no diretório atual:find . | grep ".svn/lock" | xargs rm
Jesse
1
Com o SVN 1.7, a resposta do @ BradS parece mais eficaz. Essa resposta não funcionou para mim, e a de BradS funcionou.
Ira Baxter
1
No meu caso, não há nenhum arquivo de bloqueio em qualquer lugar.
Tim MB
106

No meu caso, resolvi-o excluindo manualmente um registro no registro de bloqueio de arquivo SQLite ".svn \ wc" na tabela WC_LOCK.

Abri o arquivo "WC" com o editor SQLite e executei

delete from WC_LOCK

captura de tela mostrando todas as entradas removidas de WC_LOCK

Após o comentário de eakkas , talvez seja necessário excluir todas as entradas da WORK_QUEUEtabela também.

Gad D Lord
fonte
1
Isso funcionou para mim no Subversion 1.7.5 no Windows. Baixe a versão de teste do SQLite Expert aqui: sqliteexpert.com/download.html . Execute a instrução sql "delete" acima na guia SQL.
amigos estão
Isto é muito, muito melhor, apenas uma diferença é que eu cliquei no vermelho botão (-)
Rohit Srivastava
3
Um espião DI SQL gratuito também faria o truque: yunqa.de/delphi/doku.php/products/sqlitespy/index
Ivelin Nikolaev
12
Isso funcionou para mim também, mas eu também precisava limpar as entradas na tabela WORK_QUEUE
eakkas
6
Não funcionou excluindo o item do WC_LOCK - o que funcionava era o conteúdo do blob do meu item WORK_QUEUE e, com certeza, era o arquivo de problema - removi o arquivo do navegador de repositório e excluí o item work_queue - depois disso fez uma limpeza e voltou aos negócios!
22813 GregM
95

A maneira mais fácil de todas:

  1. Vá para o diretório pai (pasta) do projeto .
  2. Pres Clique com o botão direito
  3. Pressione TortoiseSVN e pressione Limpar ...
  4. A caixa de diálogo de limpeza apareceria automaticamente
  5. Select Clean up working copy status, Break locks, Fix time stamps, Vacuum pristine copies, Refresh shell overlays,Include externals
  6. Pres OK

Você fez seu trabalho com sucesso.

Verifique as capturas de tela para sua referência.

Primeiro passo:

insira a descrição da imagem aqui

Segunda etapa: ative a opção Break lock (segunda caixa de seleção na janela pop-up de limpeza) insira a descrição da imagem aqui

Espero que isso ajude muito.

Hiren Patel
fonte
10
no meu caso, a opção "quebra de bloqueio" foi suficiente, talvez tente primeiro com apenas um presente
Donatello
Boa resposta. Eu tive um caso de 'cegueira de diálogo' com este e nunca verifiquei as opções de limpeza. Historicamente, a 'navegar para a raiz e até limpa' usado para trabalho, mas eu acho que quebrar as fechaduras foi suficiente no meu caso ..
Phil Cooper
1
Trabalhou para mim também!
Daniel Silva
Não achava que 'quebrar bloqueios' faria isso, porque eu não fiz nenhum bloqueio. Mas, aparentemente, ele rompe bloqueios svn-internos que estavam causando esse problema. Obrigado!
basher
Não funcionou para mim 😦
Chimpanzé em guerra
48

Um colega no trabalho vê constantemente essa mensagem e, para ele, é porque ele excluiu um diretório sob o controle de versão SVN sem excluí-lo do SVN e, em seguida, criou um novo diretório em seu lugar, não sob controle de versão, com o mesmo nome.

Se este for o seu problema ...:

Existem diferentes maneiras de corrigi-lo, dependendo de como / por que o diretório foi substituído.

De qualquer forma, você provavelmente precisará:

A) Renomeie o diretório existente para um nome temporário

B) Faça um SVN reverter para recuperar o diretório excluído do sistema de arquivos, mas não do SVN

A partir daí, você

A) Copie os arquivos relevantes para o diretório que foi excluído

B) Se você teve uma mudança significativa de conteúdo no diretório, faça uma exclusão do SVN no original, confirme e renomeie seu novo diretório para o nome desejado, seguido de uma adição do SVN para colocá- lo sob controle de versão.

Matt
fonte
1
Sua segunda etapa B) parece uma péssima idéia para mim, pois interromperia o histórico de revisões de itens do diretório original mantidos na nova versão.
Dunaril 30/03/11
As coisas muito ruins aconteceram quando a pessoa excluiu um diretório com versão do sistema de arquivos, mas não do SVN. A resposta acima pode não ser uma recuperação perfeita, mas é uma recuperação.
Teemu Leisti
34

Para mim, nenhuma das soluções acima funcionou. Encontrei uma solução quebrando bloqueios. Quando realizei a limpeza do svn, selecionei "Break Locks" juntamente com "Clean up status da cópia de trabalho".

insira a descrição da imagem aqui

LoveForDroid
fonte
Para mim, quebrar o bloqueio do navegador de repositório Tortoise SVN funcionou. Quebrar o bloqueio na pasta com saída não fez nada.
Bhargava Mummadireddy 18/10/19
23

Este funcionou para mim.

  1. Vá para a pasta raiz,
  2. Clique com o botão direito e limpeza
  3. Verifique todas as opções disponíveis
  4. Pressione OK

Após a limpeza, você poderá atualizar para a versão mais recente.

Lança
fonte
2
Isso funciona para mim também. Você precisa verificar todas as opções disponíveis (6 entradas na minha versão) para prosseguir com a limpeza; a falha ocorre se você apenas marcar as opções [Limpar status da cópia de trabalho] e [Incluir externas].
Vincent Jia
1
Isso funcionou totalmente para mim ... basta clicar com o botão direito do mouse em projeto> Equipe> Limpeza. Não foi necessário remover nenhuma linha do SQL em .svn nem qualquer outra coisa. Apenas isso fez o trabalho. Obrigado!
Msqar
Isso funcionou para mim também na versão 1.7.4 do TortoiseSVN. Fui com as caixas de seleção padrão que foram apresentadas.
SLM
Ajudou-me hoje, mas não precisava verificar todas as opções disponíveis. Os três últimos que reverteram minhas alterações, não verifiquei e funcionou de qualquer maneira. Veja também stackoverflow.com/a/35192644/460775
EMBarbosa
1
Isso funcionou para mim. Acabei de verificar Clean up working copy statuse Breaks lockseInclude externals
Phiber
11

Para mim, foi realmente culpa da Tortoise, mais ou menos. O Tortoise apenas reclamou "não pode limpar, executar limpeza", mas quando eu executei a linha de comando (svn cleanup), ele me disse claramente que não podia excluir alguns arquivos que estavam em uso, cuja solução era óbvia. Depois que fechei o Visual Studio (que mantinha os arquivos abertos), a limpeza funcionou bem.

Outros programas também podem manter os arquivos abertos no repositório, causando esse problema. O Excel mantendo um xls aberto foi o culpado em outra instância, portanto, pode ser aconselhável fechar todos os programas que possam estar usando qualquer coisa no repositório ou até mesmo reiniciar para forçar o fechamento de programas e tentar a limpeza novamente.

Mark Sowul
fonte
7

Eu tive esse problema porque pastas externas não desejam ser vinculadas a uma pasta existente. Se você adicionar uma linha de propriedade svn: externals em que o destino é uma pasta existente (com ou sem versão), você obterá o erro bloqueado de cópia de armazenamento em SVN. Aqui, uma limpeza também informa que tudo está bem, mas a atualização ainda não funcionará.

Solução: exclua a pasta problemática do repositório e faça uma atualização na pasta raiz onde a propriedade svn: externals está configurada. Isso criará a pasta e tudo ficará bem novamente.

Esse problema surgiu para mim porque o svn: externals for files exige que a pasta de destino seja controlada por versão. Depois que notei que isso não funciona em diferentes repositórios, troquei de arquivos externos para pastas externas e entrei nessa bagunça.

Oliver Zendel
fonte
6

A maneira mais fácil de fazer isso é mostrar pastas ocultas e abrir a pasta .SVN. Você deve ver um arquivo de zero KB chamado "lock", excluindo isso corrigirá o problema

fawefawefa
fonte
5

Encontrei exatamente o mesmo problema usando o SVN 1.7 e nenhuma das correções mencionadas acima funcionou.

Em primeiro lugar, certifique-se de fazer backup de todo o seu conteúdo editado.

Depois de passar algumas horas (não fiz o download novamente de tudo porque meu ramo tem mais de 6 GB), descobri que havia um arquivo db chamado "wc" na pasta .svn do seu ramo.

Abra o arquivo db usando qualquer gerenciador de banco de dados (usei o plugin sqlite manager do firefox) e navegue até a tabela WC_LOCK. Esta tabela terá as entradas para os bloqueios adquiridos. Exclua os registros da tabela e pronto :)

Rohan
fonte
mesmo sendo praticamente uma duplicata da resposta anterior, eu votei porque você mencionou o plug-in do gerenciador de SQLite do firefox.
ehambright
3

Quando tenho esse problema, acho que executar o comando cleanup diretamente no caminho do problema geralmente parece funcionar. Então executarei a limpeza a partir da raiz de trabalho novamente, e ela reclamará de algum outro diretório. e eu apenas repito até que pare de reclamar.

Stephen
fonte
1
Eu não poderia encontrar um arquivo de bloqueio como com respostas anteriores, mas isso funcionou para mim :)
serenskye
3

Se você estiver em uma máquina Windows, visualize o repositório através de um navegador e poderá ver dois arquivos com o mesmo nome de arquivo, mas usando casos diferentes. O Subversion faz distinção entre maiúsculas e minúsculas e o Windows não, portanto, você pode obter um bloqueio quando o Windows pensa que está baixando o mesmo arquivo e o Subversion não. Exclua os nomes de arquivo duplicados no repositório e tente novamente.

toxaq
fonte
3

Eu fiz isso apenas criando uma nova pasta, verificando o projeto, copiando os arquivos atualizados para a nova pasta.

Foi corrigido com um novo check-out.

Don
fonte
Eu fiz o mesmo. (Eu coloquei a causa raiz para o AnkhSVN mexer com minha cópia de trabalho. O AnkhSVN agora está desinstalado).
Scotty.NET
2

Você está usando o TortoiseSVN e acabou de atualizar? Eu já tive esse problema antes quando passava de 1,4 para 1,5 e não reiniciava. (Tente reiniciar).

O motivo pelo qual você precisa reiniciar é porque o arquivo de cache fica funky.

Caso contrário, para seguir em frente, exporte essa cópia de trabalho para uma nova pasta (não copie as pastas ocultas .svn), faça o check-out novamente do projeto e mova todo o seu código de volta e prossiga com a sua confirmação.

Adão
fonte
Isso aconteceu comigo também, ou seja, eu só precisava reiniciar o código #
Matthew Lock
2

apenas exclua as pastas .svn e execute uma limpeza no diretório pai. Funciona perfeitamente!!

Ben
fonte
3
No SVN 1.7, isso não funcionará porque há apenas uma pasta .svn, na parte superior. Se excluído, o anexo do repositório é removido.
AnneTheAgile 6/12/12
2

Nas versões do Mac OS: Ação -> Limpar bloqueios de cópia de trabalho em ...

HotJard
fonte
2

Costumo ter esse problema. Meu padrão que causa problemas de limpeza.

  1. Abro o arquivo de imagem no visualizador.
  2. Eu apago o arquivo / pasta de imagem.
  3. Estou tentando confirmar / atualizar

Fechar o visualizador de imagens onde o arquivo excluído é aberto resolve o problema. Talvez outro software possa bloquear a limpeza da mesma maneira.

Em geral. Acredito que reiniciar o computador pode ajudar nesses casos.

Dmitry Borisov
fonte
1

O SVN normalmente atualiza sua estrutura interna (.svn / prop-base) dos arquivos em uma pasta antes que os arquivos reais sejam buscados no repositório. Uma vez que os arquivos são buscados, isso será limpo. Freqüentemente, o erro é gerado porque a "atualização" falhou ou foi cancelada prematuramente durante o andamento da atualização.

  1. Verifique se os arquivos estão listados no diretório .svn / prop-base
  2. Remova todos os arquivos que não estão na pasta
  3. Limpar
  4. Atualizar

Agora a atualização deve funcionar.

lud0h
fonte
1

Tive o mesmo problema, porque eu exportei uma pasta em uma pasta controlada por versão. Teve que excluir a pasta do TortoiseSVN e excluir a pasta do sistema de arquivos (o TortoiseSVN não gosta de subpastas não-versionadas ... por que não ???)


fonte
Devo acrescentar que exportei uma pasta PARA A MESMA PASTA .. é assim que você desversão anterior. pastas com versão.
1

Iniciar pesquisa .... Bloquear ... Selecione todos os arquivos listados e exclua .. corrigidos

Ryan
fonte
1

o seguinte deve fazer:

status svn | grep ". L" | / / * do sed (. *) $ / \ 1 / '| awk '{tamanho da impressão ($ 1), $ 1}' | sort -nr | awk '{print "pushd" $ 2 "; limpeza de svn; popd"}' | sh

bugfeeder
fonte
1

Não exclua sua solução!

na pasta .svn você tem um arquivo chamado lock, tem 0 bytes de comprimento

Você pode excluir todos esses arquivos de todas as pastas .svn da sua solução e funcionará

Funcionou no meu caso

Pára
fonte
Esta é a solução mais simples! Trabalhou para mim
Nathan
Sim, infelizmente não funciona para a versão mais recente do SVN. Para a versão mais recente, você precisa excluí-lo porque não há mais um arquivo de bloqueio. parece não haver mais arquivos, existe uma estrutura de pastas totalmente diferente. Se alguém souber se ainda há algo que possa ser modificado de maneira semelhante à acima, compartilhe conosco.
Para
1

A versão in-loco dos arquivos e uma nova verificação no mesmo local resolveram esse problema para mim.

No TortoiseSVN, para fazer uma versão in-loco, arraste com o botão direito a pasta raiz da cópia de trabalho da lista de arquivos para dentro da árvore de diretórios e escolha "SVN Exportar itens com versão aqui" no menu pop-up. O TortoiseSVN percebe que o destino é o mesmo que a fonte e sugere a versão não autorizada da cópia de trabalho.

Após a versão, faça um novo check-out na mesma pasta (que agora contém uma cópia não versionada de todos os arquivos que você tinha). O TortoiseSVN avisa que você está fazendo check-out em uma pasta existente, mas você pode prosseguir.

Depois disso, as limpezas, atualizações e outras operações funcionavam sem problemas. Como as duas etapas acima preservam as modificações locais, não deve haver perda de informações (mas fazer backup da cópia de trabalho antes disso pode ser uma boa idéia).

Um aviso: se a cópia de trabalho contiver versões mistas ou alterações de propriedade não confirmadas, essas informações serão perdidas. Para mim, essa não é uma ocorrência comum e, dada a escolha de uma cópia de trabalho corrompida ou a perda de alterações de propriedade não confirmadas, costumo optar por esta última.

Magnus
fonte
1

Eu tive esse problema em que a "limpeza" funcionou, mas a "atualização" continuaria a falhar. A solução que funcionou foi excluir a pasta em questão pelo Windows Explorer, não a exclusão do TortoiseSVN (que marca a exclusão como algo a ser confirmado no repositório e, em seguida, fiz um "checkout" para essencialmente "atualizar" a pasta do repositório.

Mais informações sobre a diferença entre uma exclusão de O / S e uma exclusão de SVN aqui: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-rename.html

Notavelmente:

Quando você TortoiseSVN → Excluir um arquivo, ele é removido da sua cópia de trabalho imediatamente, além de ser marcado para exclusão no repositório na próxima confirmação.

E:

Se um arquivo for excluído por meio do explorador em vez de usar o menu de contexto do TortoiseSVN, a caixa de diálogo de confirmação mostrará esses arquivos e permitirá que você os remova do controle de versão também antes da confirmação. No entanto, se você atualizar sua cópia de trabalho, o Subversion localizará o arquivo ausente e o substituirá pela versão mais recente do repositório.

Xonatron
fonte
1

Se você estiver no Linux, tente o seguinte:

find "/the/path/to/your/directory" -name .svn -type d | xargs chmod 0777 -R

Em seguida, execute o cleanupcomando nesse diretório e tente atualizar.

The Love Of Ocde
fonte
1

Fiz o seguinte para corrigir meu problema:

  1. Renomeie a pasta incorreta colocando um "_" na frente do nome da pasta.
  2. Fez uma "Limpeza" da pasta pai.
  3. Renomeou a pasta incorreta para seu nome original.
  4. Fiz um commit.
user1319487
fonte
1

No Solution Explorer, clique com o botão direito do mouse no projeto, no submenu de abertura, clique em subversion e selecione limpeza. Isso resolverá o problema, como aconteceu comigo. Espero que funcione.

Nadeem Jamali
fonte
1

Para fazer a limpeza

  1. Exclua a pasta .svn.

  2. Faça o svncheckout na pasta raiz.

  3. Tente executar a operação de limpeza.

Este problema foi resolvido.

Jayaguru
fonte