Como posso restaurar o controle svn se a pasta .svn foi danificada?

Eu tenho um par de grandes checkouts onde a pasta .svn foi danificada, então estou recebendo e erro, "Cleanup não conseguiu processar o seguinte caminho .." E eu não posso mais confirmar ou atualizar arquivos nesse diretório.

Eu acabei de excluir e fazer o checkout novamente, mas todo o diretório é mais um show.

Existe uma ferramenta que irá restaurar as pastas .svn para pastas específicas sem ter que baixar tudo?

Eu entendo que ele terá que baixar todos os arquivos naquela pasta para que ele possa determinar se eles foram alterados ... mas os subdiretórios com pastas .svn válidas devem estar bem.

Eu sou um grande fã do TortoiseSVN ou da linha de comando do linux.

Pensamentos?

0
adicionado editado
Visualizações: 1

7 Respostas

Se você souber qual pasta tem o diretório .svn danificado, basta excluir esse diretório e executar uma atualização svn novamente. Você pode ter que excluir todo o diretório, incluindo seu conteúdo atual. Obviamente, se a pasta com o diretório .svn danificado contiver um gigabyte, você estará de volta ao ponto de partida.

0
adicionado
Se você tem subversão <1.5, acho que essa pode ser a única opção.
adicionado o autor nedned, fonte

Eu bati isso no passado e não encontrei nenhuma solução de trabalho, exceto a "opção nuclear" (ou seja, excluir o diretório e check-out).

Não tenho certeza se esse é o seu problema, mas a minha corrupção estava sendo causada por um antivírus no acesso na mesma máquina que o servidor SVN.

0
adicionado
Eu fiz isso com Tartaruga. Certifique-se de atualizar o url do repositório para corresponder ao caminho da sua pasta, pois provavelmente você não estará no root fazendo isso.
adicionado o autor Alex, fonte

Caso você tenha alterações nos arquivos e não possa apagá-los, você pode usar o recurso do Subversion 1.5 que permite que você 'finalize com obstáculos'.

Basta apagar o diretório .svn neste diretório e:
(você não precisa deletar diretórios internos ao usar arquivos --depth, obrigado Eric)

Caso o diretório quebrado seja o diretório principal da cópia de trabalho:

svn checkout --depth files --force REPOS WC

E se o diretório acima do diretório quebrado ainda for versionado, execute:

svn update --depth files --force WC

nesse diretório.
Em ambas as amostras, REPOS é a url no repositório que corresponde ao diretório quebrado, e WC é o caminho para o diretório.

Arquivos que foram originalmente modificados estarão no estado modificado após isso.

0
adicionado
Eu era capaz de evitar a exclusão da pasta .svn em subdiretórios adicionando o siwtch "--depth files" ao comando checkout. Você poderia editar a postagem para refletir isso e talvez esclarecer o texto REPOS e WC. Obrigado!
adicionado o autor Eric Goodwin, fonte
thx, ajudou muito!
adicionado o autor Martin, fonte

Se os subdiretórios e OK e os subdiretórios forem grandes, você poderá tentar uma nova verificação não recursiva.

0
adicionado

Faça um backup da pasta que tem o .svn ausente

Em seguida, exclua a pasta

Se for a raiz do checkout, você terá que fazer o checkout

Se não for a raiz, basta executar uma atualização de um diretório acima.

Em seguida, mova a pasta de backup sobre ela. (O ideal é não mover de volta as pastas .svn)

Continue trabalhando e certifique-se de atualizar/commit!

0
adicionado

Eu encontrei o mesmo erro hoje. Aconteceu quando tentei mudar de ramificações e não apague um dos arquivos que não estão no repositório svn. Depois disso, a pasta foi bloqueada e não consigo usar nenhum comando para que funcione novamente.

Eu basicamente deletei o que tinha e refaça o checkout. É demorado, mas eu realmente quero ter certeza que o svn está limpo antes que eu possa começar a trabalhar novamente. Obrigado!

0
adicionado

A solução selecionada funcionou para restaurar a pasta .svn de nível superior, mas ela não reconhece os objetos filho, portanto, tudo parece estranho para o SVN neste ponto, apesar de o versioning estar intacto nas subpastas.

0
adicionado