Deseja excluir revisões do meu repositório SVN


33

As revisões mais recentes no meu repositório de códigos foram corrompidas e desestabilizaram meu aplicativo. Eu quero voltar para uma revisão anterior.

Mas não quero simplesmente usar 'reverter' na minha cópia de trabalho; Na verdade, eu quero excluir minha revisão principal e várias revisões anteriores em meu repositório, 'revertendo' meu repositório para uma revisão anterior, que se tornaria a revisão principal. Alguém sabe como eu faria isso?


1
Você não pode realmente excluir revisões antigas, tudo o que você pode fazer é reverter as alterações e confirmar isso, conforme mencionado por Felix. Sidenote interessante, Git (bem como outras soluções de controle de versão) realmente faz permitem revisões verdadeiramente exclusão ..
davr

3
Sim, você pode, basta acessar o repositório SVN com o svnadmin. Veja minha resposta abaixo.
martin

davr está tecnicamente certo. O que você descreve é ​​despejar todas as revisões, exceto as ruins, e despejar isso sobre o repositório antigo. Na minha opinião, isso não é a mesma coisa que 'excluir' uma revisão.
Sirex

Respostas:


12

Talvez este link o ajude a:

http://www.sampablokuper.com/2009/03/27/svn-revert-to-revision/

Citar:

  1. Mude para o diretório superior dentro da sua cópia de trabalho (supondo que você queira reverter toda a cópia de trabalho).

  2. execute svn revertpara reverter os arquivos da sua cópia de trabalho para o estado em que estavam quando você efetuou o check-out pela última vez.

  3. corra svn status -vpara ver a qual número de revisão sua cópia de trabalho agora corresponde (é o número de revisão mais alto na lista que svn status -vproduz).

  4. execute svn merge -rXX:YYonde XXé o número que você obteve na etapa anterior e YYé o número da revisão à qual deseja reverter.

  5. Feito! A possível exceção a isso é que os arquivos na sua cópia de trabalho que não existiam quando a revisão YYfoi feita originalmente ainda estarão lá, porque, por padrão, o svn não remove as coisas. Se você quiser se livrar deles, execute um svn del [filename]em cada um deles.

  6. Bem feito! Agora brinque com sua cópia de trabalho como se todas essas edições intermediárias nunca tivessem acontecido. E quando estiver pronto para comprometer seus esforços, use svn commit como de costume!


1
No sistema operacional Windows, opção 4, execute svn merge -rXX:YY .Lembre-se de colocar um ponto no final da linha para fazer referência ao diretório atual. E no TortoiseSVN, há uma opção para reverter a mesclagem.
Shantha Kumara 01/03/12

3
Na verdade, isso não reverte para "revisão anterior, que se tornaria a revisão principal". Não faz da revisão mais antiga o HEAD. Em vez disso, ele cria um novo HEAD. Veja a resposta de Martin.
Matthew Flaschen

Modifiquei a resposta para incluir a observação de Shantha sobre o período final. É o mesmo no * nix também.
Mike Kormendy

72

Isso funcionou para mim. Dado que você tem a revisão 1234 como HEAD e deseja reverter os últimos três commits:

svnadmin create newrepo
svnadmin dump -r 0:1231 repo | svnadmin load newrepo
mv repo oldrepo
mv newrepo repo

12
+1. Você é o único que entendeu a pergunta e deu uma resposta específica.
Matthew Flaschen

6
Esta é tecnicamente a resposta certa. Deve-se ressaltar, no entanto, que isso, além de ser um pouco complicado de fazer, também invalidará todas as cópias retiradas - portanto, você precisará alertar qualquer pessoa que também esteja usando o repositório.
sleske

1
rápido, fácil e direto ao ponto e, na verdade, o que o pôster pedia.
criar o seu alerta

7
Contanto que você também copie o UUID do repositório para o novo repositório (consulte "svnadmin setuuid", copiando do UUID em "svn info" no repositório antigo), apenas os check-outs atualizados para as revisões que você está cortando. ser invalidado.
Bryan Petty

1
Sobre os novos acordos de recompra você pode precisar de permissões de arquivo de correção ou copiar em arquivos nos ganchos / diretórios conf
Adams

5

Sei que essa é uma pergunta antiga, no entanto, acabei de descobrir como fazer isso com o Windows / TortoiseSVN.

Como um comentário sugerido, você não pode "excluir" uma revisão, mas o que você pode fazer é fazer uma revisão mais atual que seja a mesma que você deseja reverter.

  1. Faça o checkout do HEAD do repositório para o diretório do qual você deseja reverter a revisão.
  2. Carregue a exibição "Show Log" no TortoiseSVN para o diretório de nível mais alto que você deseja reverter (por exemplo, "Trunk").
  3. Clique com o botão direito do mouse na revisão que você deseja remover NOTA: esta é a revisão que você deseja remover, e não a que você deseja reverter.
  4. Selecione "Reverter alterações desta revisão".
  5. Clique em "Sim" no prompt.
  6. Atualize o checkout normalmente, mas para "HEAD".
  7. Confirme de volta.

Você irá então a todos os outros que fizeram check-out, solicitarão a atualização e a remoção de novos arquivos.

Além disso, você precisará garantir que todos saibam o que foi essa revisão e potencialmente atualizar a descrição.


Qual é a diferença do procedimento normal de "reversão"?
Tomer W

Reverter apenas altera sua cópia de trabalho para o que está no repositório ... é assim que o HEAD de um relatório reflete o estado de qualquer confirmação anterior.
Martin

1
Obrigado por isso - fazendo isso da maneira tartaruga SVN era apenas o que eu precisava para reverter uma errônea cometer :)
Dr. Andrew Burnett-Thompson

Há também uma entrada no menu de contexto " Reverter para esta revisão " na janela Log.
Uwe Keim

4

Você pode usar dump / load para esse fim.

Você também pode usar o svnsync para fazer um backup de alguma revisão.

Se você tem um grande repositório, isso leva tempo.


3

Para mim (VisualSVN, 30-HEAD) funciona isso:

  del C: \ Repositórios \ MyRepo \ revs \ 0 \ 30
  del C: \ Repositórios \ MyRepo \ revs \ 0 \ 29
  del C: \ Repositórios \ MyRepo \ revs \ 0 \ 28
  del C: \ Repositórios \ MyRepo \ revprops \ 0 \ 30
  del C: \ Repositórios \ MyRepo \ revprops \ 0 \ 29
  del C: \ Repositórios \ MyRepo \ revprops \ 0 \ 28
  eco 27> C: \ Repositórios \ MyRepo \ db \ current
  


Como isso é melhor do que outras respostas?
Toto

É muito mais rápido.
Anton Golikhoff 02/02

0

Vá para o terminal e navegue até o svn repsitory: now type

svn update -r "número da revisão que você deseja reverter"


2
Bem-vindo ao Super Usuário! Por favor, leia a pergunta novamente com atenção. Sua resposta não responde à pergunta original. O OP diz "Não quero simplesmente usar 'reverter' na minha cópia de trabalho"
DavidPostill
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.