Como corrigir "falta a área administrativa da cópia de trabalho" no SVN?

184

Excluí manualmente um diretório que acabei de adicionar, offline, no meu repositório. Não consigo restaurar o diretório.

Qualquer tentativa de fazer uma atualização ou uma confirmação falhará com:

"blabla/.svn" containing working copy admin area is missing.

Eu entendo o porquê, mas existe alguma maneira de corrigir isso.

Não quero fazer check-out de todo o repositório e adicionar minhas alterações manualmente, isso levaria horas.

e-satis
fonte

Respostas:

148

De acordo com isso: http://www.devcha.com/2008/03/svn-directory-svn-containing-working.html

Faça o check-out da pasta "blabla" para um local diferente e copie sua pasta .svn novamente para o "blabla" original.

Marca
fonte
62
Eu tenho muito SVN. Os .svnsubdiretórios de lixo em todo o lugar devem ter sido a pior ideia do histórico de controle de versão.
Johannes Fahrenkrug
9
Gente, verifique as sugestões abaixo de Rob, é muito fácil, então a solução atual.
Mohammad Arif
Mohammed, obrigado pelo alerta. Isso funcionou para mim. Estava tentando fazer com que o SVN ignorasse um diretório de log e excluir .svn me levou a esse problema. A solução de Rob resolveu isso.
Asmor
Johannes, eu também não sou proponente do SVN, mas a vantagem dos diretórios .svn é que você pode verificar os subdiretórios de um repositório e manter o controle de versão.
Joseph Persie
@MohammadArif, Existem dois "roubos" agora
Charles Clayton
123

fwiw, eu tive uma situação semelhante e usei svn --force delete __dir__ . Isso resolveu o problema para mim. Então continuei trabalhando com minha cópia de trabalho normalmente.

Matt Setter
fonte
2
Isso funcionou para mim também. As atualizações e as limpezas falharam porque o diretório nunca estava no repositório, mas a cópia de trabalho tinha certeza de que estava sob controle de revisão. Gostaria de saber se adicionei o diretório, mas o excluí antes de o comprometer?
Magnus
1
Isso é muito bom. Eu adicionei um diretório, excluí o .svn, mas nunca fiz o commit. Isso totalmente fez o truque
Eric
8
Obrigado; Essa resposta me salvou muito tempo. svn cleanupentão svn --force delete <directory-that-doesn't-exist-but-should>trabalhou para mim.
mpontillo
Trabalhei na segunda tentativa, tentei sem o --force, que de alguma forma deixou um arquivo de bloqueio em .svn do pai que precisei remover manualmente. A segunda vez com --force corrigiu o problema.
Jörn Horstmann
3
Hum, esse comando simplesmente me dá o mesmo erro "cópia de trabalho".
Oscar
72

O que fiz para corrigir isso foi excluir a cópia local da pasta em questão e, em seguida, executar um svn updatedos pais diretamente posteriormente.

Corrigido.

Maurizio
fonte
3
Não acredito ... tentei de tudo ... e foi assim tão fácil !!! Funcionou perfeitamente, muito obrigado !!!!!
lucaferrario 4/12/12
Esta é a resposta mais direta.
joaerl
35

Você pode tentar verificar uma nova cópia do diretório pai?

Edit: Para ser um pouco mais específico, eu quis sugerir subir um nível e excluir o diretório que o contém. Então faça um

svn update --set-depth infinity

para substituir o diretório

Rob Wells
fonte
Eu tentei isso, mas por algum motivo estranho, acabei com um diretório vazio. Eu não entendi ...
e-satis
Um <code> svn update blabla </code> explícito do pai também deve funcionar.
jmanning2k
@ jmanning2k, foi o que pensei, mas o OP disse que ele havia tentado e não havia funcionado.
9119 Rob Wells
Para esclarecer, eu sugeri --set-depth infinitypor causa deste: stackoverflow.com/questions/866835/...
Wim Coenen
1
Isso precisa de muito mais votos positivos ... solução rápida e relativamente (para os padrões svn) limpa.
Dino
6

Adicionei um diretório ao svn e excluí acidentalmente a pasta .svn.

eu usei

svn delete --keep-local folderName

para resolver o meu problema.

Alexander
fonte
Isso funcionou para mim quando meu IDE adicionou um diretório e, depois, eu havia movido um diretório com o mesmo nome antes de ser confirmado.
quellish
tentei isso, mas ainda não consegui confirmar. Eu usei o svn checkout --force [url]que recriou a pasta .svn
Lex
4

Acabei de fazer 'svn revert / blabla' e funcionou, a pasta está de volta e posso svn excluí-la

Mala
fonte
Obrigado. Eu tive esse problema e tentei sua sugestão e funcionou.
Boric 31/01
3

O erro "Diretório 'blah / .svn' que contém a área administrativa da cópia de trabalho está ausente" ocorreu quando tentei adicionar o diretório ao repositório, mas não tinha privilégios suficientes no sistema de arquivos para fazê-lo. O diretório ainda não estava no repositório, mas estava reivindicando estar sob controle de versão após a falha na adição.

Verificar uma cópia do diretório pai para outro local e substituir a pasta .svn no diretório pai da cópia de trabalho me permitiu adicionar e confirmar o novo diretório com sucesso (depois de corrigir as permissões do arquivo, é claro).

Rob DiCiuccio
fonte
2

Usamos maven e svn. Foi um check-in incorreto do diretório de destino para o SVN que causou esse erro. Remover isso corrigiu tudo, se essa dica ajudar alguém.

Madu
fonte
Removendo o que / de onde exatamente?
DerMike 11/11
O maven cria o diretório "target" ao construir. Normalmente, ninguém deve verificar este. Um check-in acentuado fez um problema de permissão na próxima vez que criou esse erro. A remoção do diretório "target" do SVN resolveu o problema.
Madu
2

Tentei svn rm --force /path/to/dirsem sucesso, mas acabei rodando svn upe o consertou para mim.

Nathan JB
fonte
1

Eu tive esse erro recentemente, quando os arquivos foram excluídos pelas configurações em meus globos SVN. O erro foi especialmente desagradável, pois também excluí os arquivos diretamente do repositório - e isso significava que as soluções acima recusadas não funcionariam. Nesse caso, excluir manualmente o diretório .svn do diretório que removi do SVN me permitiu executar uma atualização que, em seguida, me permitiu confirmar.

Casebash
fonte
1

Eu tive o mesmo problema quando estava tentando alternar "C: \ superpasta"

Mensagens de erro:

Directory 'C:\superfolder\subfolder\.svn'
containing
working copy admin area is missing
Please execute the 'Cleanup' command.

Depois de tentar fazer uma "limpeza", recebi o seguinte erro:

 Cleanup failed to process the following paths:
 C:\superfolder\
'C:\superfolder\subfolder\' is not a working copy directory

Solução:

  1. Exclua a pasta "subpasta"
  2. Limpe a pasta "superpasta"
  3. Tente mudar novamente a pasta "superpasta"

isso funcionou para mim. Por favor, deixe-me saber se isso também funciona para você.

Andreas
fonte
1

Eu tive esse erro recentemente. Isso foi causado pela raiz de possuir alguns arquivos no diretório que causou esse erro.

Depois de alterar as permissões, tudo funcionou conforme o esperado.

JJ
fonte
1

Não entendi muito de suas postagens. Minha solução é

  1. Recorte a pasta problemática e copie para algum local.
  2. Obtenha a solução do Subversion para outro diretório ativo (apenas um novo).
  3. Adicione sua pasta salva à nova cópia de trabalho e adicione-a como projeto existente (se for um projeto como no meu caso).
  4. Confirmar;
M'vy
fonte
1

Eu tive esse problema. Apenas mova blabla para outro local temporariamente, diga ao svn para revertê-lo e depois mova-o de volta. É tratado como uma nova adição. Simples!

Bórico
fonte
1

O mais simples que me ajudou:

rm -rf _dir_in_question_
svn up

Se você tiver alterações no diretório problemático, essa não é uma boa solução para você.

allprog
fonte
1

Me deparei com esse problema ao substituir uma biblioteca de API de terceiros por uma versão mais recente, e nenhuma das soluções aqui realmente funcionou para mim porque eu queria substituir a versão SVN pela versão local. Minha solução foi a seguinte:

1) Mova a pasta incorreta para o meu diretório pessoal, exclua-a do SVN e confirme:

mv foldercausingproblem ~/
svn --force delete foldercausingproblem
svn commit --message "Temporary removing folder with old API"

2) Coloque a pasta de volta, adicione-a ao SVN e confirme novamente:

mv ~/foldercausingproblem ./
svn --force add .
svn commit --message "Finally all working!"

Um pouco irritante ter que se comprometer duas vezes, mas parece ter funcionado bem.

Jamie Brown
fonte
Geralmente, gosto de trabalhar no código separadamente da minha cópia de trabalho do repositório (IDEs, compiladores, analisadores de erro etc. não gostam de .svn, e não há comando 'TODOS IGNORE .SVNs EXCETO SVN!' No Eclipse afaik); isso significa que o processo básico de confirmação do SVN para mim é: 1. checkout cópia de trabalho do repo 2. delete diretório raiz do projeto Eu tenho uma atualização para 3. copie e cole o diretório do projeto atualizado no diretório pai do projeto na cópia de trabalho 4. svn adicione --force <projname> 5. confirmar. Isso geralmente funciona, mas ocasionalmente pode gerar o erro do OP. Correção de Jamie Brown trabalhou no meu caso
CCJ
0

Caso alguém queira mais uma solução:

  1. Faça check-in na sua nova pasta como "foldername2"
  2. Entre no navegador de repositório Tortise SVN
  3. Renomeie "foldername2" para "foldername"
  4. No Windows Explorer, faça uma atualização

Espero que ajude alguém.

-Ev

Ev.
fonte
uma solução apenas para Windows.
Raptor
0

Para mim, o mesmo problema aconteceu quando ambos:

  • excluído (--force ) um arquivo .map
  • adicionado * .map à svn:ignoreviasvn propedit svn:ignore .

Minha solução foi:

  1. desfazer alterações na propriedade
  2. confirmar alterações nos arquivos
  3. faça uma nova cópia do repositório (infelizmente!)
  4. alterar a propriedade e confirmar
18446744073709551615
fonte
0

Eu tive esse problema quando estava tentando adicionar um diretório ao svn. Eu o resolvi entrando no navegador de repositório. Clique com o botão direito na janela esquerda, escolha adicionar pasta e adicione o diretório diretamente no navegador de recompra.

Em seguida, apaguei o diretório localmente (após o backup, é claro), fiz uma limpeza e atualização do svn e tudo estava funcionando novamente.

Speck
fonte
Devo acrescentar que isso é adicionado ao meu arquivo "svn sucks".
Speck
0

Primeiro, faça o checkout do projeto em seu sistema em uma pasta. Em seguida, remova a pasta .svn do projeto de conflito e copie a pasta .svn da nova pasta de checkout e cole na sua pasta de cópia de trabalho. Então o problema está resolvido.

Jaideep Singh Raikwar
fonte
0

Uma tarefa comum que experimentei foi ter que pegar um diretório de repo na preparação e copiá-lo para outro repo - ambos no SVN e ambos chamaram o mesmo nome. A maneira que funcionou para mim foi a seguinte:

svn --force delete PROBLEMATIC-DIR
svn export "https://OLD REPO-A/ new-repo-A"
svn add new-repo-A
svn commit new-repo-A
texasdave
fonte