Perdeu nosso servidor SVN… qual é o próximo passo?

3

Então ... perdemos nosso repositório SVN. Por circunstâncias infelizes, também não temos backup viável.

O que fazer? Basta fazer um "svn export" de alguém com a atualização mais recente e começar de novo? Existe alguma maneira de recuperar algum histórico? Ou conecte nossos checkouts locais a um novo servidor?

    
por user21146 08.09.2010 / 22:32

5 respostas

5

Se tudo que você tem é um checkout, você tem um instantâneo do código, mas sem histórico.

Você pode criar um novo repositório a partir disso. Para ter os checkouts existentes conectados ao novo repo depois de configurados, provavelmente é mais um problema do que vale a pena. Será mais fácil criar um novo repo a partir do checkout mais antigo e confirmar as alterações dos checkouts mais recentes como atualizações.

Quanto à recuperação de histórico, não vejo como isso é possível sem um dump do repositório (via svnadmin dump) em algum momento. Até mesmo um depósito antigo lhe daria qualquer histórico desde a criação do repo até o local onde o despejo foi feito.

Talvez alguém tenha usado o git-svn em seu repositório em algum momento? Isso pode ter preservado um pouco da história, mas colocar isso de volta em um novo repositório do Subversion pode não ser fácil.

A recuperação de dados é cara, mas também pode ser uma opção se o dispositivo de armazenamento em que o repo estava ativo não foi fisicamente destruído ou substituído de forma destrutiva (e não era um SSD).

    
por 08.09.2010 / 22:51
2

Se você realmente perdeu seu repositório, sem backups, então sim - acabou. Não há mágica que possa restaurar dados realmente perdidos.

Portanto, se você tiver uma cópia de trabalho de alguém, poderá criar um novo repositório e adicionar os arquivos a ele. Você perde toda a história (obviamente), mas a história já foi perdida.

Você pode enviar o disco rígido para uma empresa de recuperação para tentar recuperar os dados. Uma vez que você tenha o repositório (ou pelo menos os diretórios db / revs e db / revprops), você pode recriar o repositório a partir deles (copiando-os para o diretório de um novo repositório). Se acontecer de você não ter o banco de dados inteiro, as coisas serão um pouco mais complicadas, mas ainda é possível restaurar o resto dos dados - você pode ter que enviar tudo para o collabnet e obter algum suporte deles para restaure os arquivos de dados mutilados em um novo repositório de trabalho.

Agora, você diz "svn export" de alguém com a atualização mais recente .... que sugere que a pessoa tenha uma cópia de backup da qual você pode exportar. É este o caso, ou você estava confundindo-o com uma cópia de trabalho?

    
por 08.09.2010 / 22:37
2

Como Mark está dizendo acima, se você não tiver um dump do repositório (do servidor), não poderá construir o histórico. Um checkout do SVN contém apenas a dica de onde é feito check-out. Desculpe, você é SOL. Eu acho que é por isso que as pessoas gostam de controle de fonte distribuída. Em nossa empresa eu configuro para enviar svn diffs para amazon s3 duas vezes por dia.

    
por 08.09.2010 / 22:39
2

Além das informações úteis nas outras respostas, você pode considerar isso como uma oportunidade de examinar o controle de origem distribuída (DVCS, por exemplo, git e mercurial, acho que há outros também). Com um DVCS, cada usuário tem uma cópia do repositório, fornecendo mais redundância, reduzindo o risco de perder o repositório completo.

Existe um ótimo livro online sobre o git aqui: link

    
por 08.09.2010 / 22:38
0

Primeiro: não ter backup de um SVN-Repo é uma dor e nunca deve acontecer. Mas o mesmo aconteceu comigo. Eu comecei a adicionar milhares de arquivos novamente, arquivo para arquivo, porque eu não quero checkin temporário ou outros arquivos no-source.

Quase toda a história está perdida. Mas não é perdido o último estado de check-in ! Eu consegui o último check-in, então o novo repo foi parecido com o antigo e eu também consegui o último diff!

Esta é minha receita:

  1. faça backup do seu checkout local
  2. limpe o seu checkout local, consulte: captura de tela svn-cleanup_to_last_state
  3. criar novo repo
  4. faça o checkout de novo repo em uma nova pasta vazia
  5. copie a cópia limpa antiga para a nova pasta
  6. adicione simplesmente todos os arquivos
  7. confirme
  8. sobrescreva sua nova pasta de checkout com o backup de 1.

agora você tem todos os arquivos como antes, com o último diff e somente os arquivos versionados, como antes.

    
por 02.10.2018 / 13:06

Tags