Pergunta

O que, alguém da minha equipe cometeu um "erro" para excluir vários arquivos na revisão atual do repositório da equipe. É possível atualizar a versão local atual para a revisão da cabeça? Quando clico no comprometimento, o Subclipse não reconhece os arquivos ausentes para carregá -los.

Desde já, obrigado,
Rayt

Foi útil?

Solução

Oh, pelo amor de Pete! As respostas até agora foram - na melhor das hipóteses - enganosas.

Da sua pergunta, parece que você estava tentando algo assim:

svn update -r8
# ok, I can see the deleted file now
svn commit -m "I want r8 to be newest"

Exceto que isso não funcionará. Não há modificações a se comprometer. Você pode atualizar para revisões mais antigas, mas não pode fazer alterações lá. Você não pode mudar o passado. Você só pode cometer uma nova revisão, desfazendo o dano.

Ok, vamos supor que seu repositório esteja em svn: // repo. Aqui, um exemplo simplificado no qual o tronco da pasta contém dois arquivos, "A" e "B". Vamos chamar isso de revisão 8 (R8).

trunk    # working copy of svn://repo/trunk
    a
    b

JR Hacker, desliza e exclui acidentalmente B:

svn rm b
svn commit -m "oops"

Vamos chamar a confirmação resultante R9.

Então, na próxima vez que você atualizar do repositório,

svn update

trunk
    a

B desaparece! Pânico? Não. Este é um sistema de controle de versão. Qualquer coisa que tenha sido verificada pode ser restaurada. Aqui estão duas possibilidades:

Apenas cópia de O arquivo de uma revisão mais antiga, ou seja, a última revisão onde ainda existia: 8.

svn cp svn://repo/trunk/b@8 .
svn commit -m "restored b from revision 8"

A solução mais geral é usar um mesclar. Você pode usar essa técnica para desfazer mais do que apenas uma exclusão perdida.

svn merge -r9:8 . .
svn commit -m "reverted the changes made in revision 8"

A maneira de ler esta mescla é:

Primeiro, descubra quais mudanças precisam ser feitas para chegar de R9 (volta) para R8 da pasta do repositório (svn: // repo/tronco) associado ao diretório atual (o primeiro "."). Agora, execute essas alterações na cópia de trabalho no diretório atual (o segundo ".").

Há uma sintaxe mais conveniente se você estiver apenas revertendo uma única alteração:

svn merge -c-8  . . #note the minus sign before the 8

Se você não estiver usando o SVN da linha de comando, cutuque um pouco sua ferramenta, certamente encontrará algo. O Tortoisesvn, por exemplo, tem a prática "reverter alterações desta revisão" quando você abre um log de uma cópia de trabalho.

Outras dicas

Pegue uma cópia dos arquivos excluídos em SVN da sua revisão em algum lugar (por exemplo, uma pasta temporária na área e comprometa -os de volta ao SVN.

Eu faria o seguinte:

Encontre o número da revisão antes da exclusão ... faça um dump svnadmin -r1: [GoodreVisionNumber aqui]> file.dump.

Em seguida, crie um novo repositório, "svnadmin criar [nome do repositório] e, em seguida, carregue o despejo no novo repositório. "Svnadmin load [newRepositoryName] <file.dump.

Em seguida, confira esta revisão e copie os arquivos do check -out antigo para o novo e comprometa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top