Pergunta

Eu apaguei um arquivo de um repo e agora deseja colocá-lo de volta. O melhor que posso descobrir é:

  • atualização para a revisão antes da exclusão
  • copiar os arquivos em outros lugares
  • atualização para cabeça
  • copiar os arquivos de volta
  • adicioná-los
  • commit

Isso só cheira mal e ele perde toda a história para arrancar. Tem que haver uma maneira melhor de fazer isso. Eu já olhei no O SVN Livro mas não encontrou nada e agora estou olhando para baixo a tag SVN lista.

Foi útil?

Solução

Use svn merge:

svn merge -c -[rev num that deleted the file] http://<path to repository>

Assim, um exemplo:

svn merge -c -12345 https://svn.mysite.com/svn/repo/project/trunk
             ^ The negative is important

Para TortoiseSVN (eu acho ...)

  • Botão direito do mouse em Explorer, vá em TortoiseSVN -> Merge ...
  • Certifique-se de "mesclar um intervalo de revisões" é selecionado, clique em Avançar
  • Na caixa de texto "gama de revisões a integrar", especificar a revisão que removeu o arquivo
  • Marque a caixa "merge reverso", clique em Avançar
  • clique em mala

Isso é completamente testado, no entanto.


Editado por OP : Isso funciona em minha versão do TortoiseSVN (o tipo antigo, sem no botão ao lado)

  • Vá para a pasta que o material foi delated de
  • Botão direito do mouse em Explorer, vá em TortoiseSVN -> Merge ...
  • na From seção entrar na revisão que fez a exclusão
  • na Para seção entrar na revisão antes da exclusão.
  • Clique em "merge"
  • commit

O truque é merge para trás . Kudos para sean.bright por me apontar na direção certa!


Editar: Nós estamos usando versões diferentes. O método que eu descrevi funcionou perfeitamente com a minha versão do TortoiseSVN.

Também digno de nota é que, se houvesse múltiplas mudanças no cometer estiver fusão reversa, você vai querer reverter essas outras mudanças uma vez que a fusão é feita antes de se comprometer. Se não o fizer, essas alterações extras também será revertida.

Outras dicas

O problema em fazer um merge svn como sugerido por Sean Bright é que é reintroduz outras alterações feitas na mesma revisão que a exclusão. Uma cópia svn é uma operação mais segmentado que só afetará os arquivos apagados.

Usando Tortoise SVN você pode ressuscitar um arquivo que foi excluído de sua cópia de trabalho e de revisões SVN posteriores, através de um svn copiar o seguinte:

  • Navegue até a pasta cópia de trabalho que continha anteriormente o arquivo.
  • clique com o botão direito na pasta no Explorer, vá em TortoiseSVN -.> Mostrar log
  • clique direito sobre o número de revisão pouco antes da revisão que apagou o arquivo e selecione "Navegar repositório".
  • clique direito sobre o arquivo que foi excluído e selecione "Copiar para a cópia de trabalho ..." e salve.

O arquivo excluído será agora na pasta de cópia de trabalho. Para re add-lo de volta para SVN, clique direito sobre o arquivo restaurado e selecione SVN Commit.

NB:. Este método irá preservar a história anterior do arquivo restaurado, no entanto para ver a história prévia no TortoiseSVN log você precisa ter certeza "Parar ao copiar / renomear" está desmarcada na caixa de diálogo mensagens Log

Para completar, isto é o que você teria encontrado no livro svn, se tivesse sabido o que procurar. É o que você já descobriu:

Desfazendo Alterações

Itens Resurrecting excluídos

A mesma coisa, a partir da versão mais recente (e detalhada) do livro:

Desfazendo Alterações

Itens Resurrecting Suprimido

Use o Tortoise SVN copiar funcionalidade para reverter as alterações cometidos:

  1. clique com o botão direito do pai pasta que contém os arquivos apagados / pasta
  2. Selecione a opção "log show de"
  3. Selecionar e clique direito sobre a versão antes que as mudanças / apagou foi feito
  4. Selecione o "repositório browse"
  5. Selecione o arquivo / pasta que precisa ser restaurado e clique direito
  6. selecione "Copiar para", que irá copiar os arquivos / pastas para a revisão HEAD

Espero que ajude

Eu sempre parecem usar cópia svn como uma operação de servidor então não tenho certeza se ele funciona com dois caminhos de trabalho.

Aqui está um exemplo de restaurar um arquivo excluído em uma cópia de trabalho local do projeto:

svn copy https://repos/project/modules/module.js@3502 modules/module.js

Apesar de estar dentro do diretório do projeto. Isso funciona bem para restaurar diretórios inteiros.

Se você estiver usando Tortoise SVN, você deve ser capaz de reverter as alterações de apenas que a revisão em sua cópia de trabalho (efetivamente realizar um reverso-merge), em seguida, fazer outra comprometer-se a re-adicionar o arquivo. Passos a seguir são:

  1. Navegue até a pasta na cópia de trabalho onde você apagou o arquivo.
  2. Vá para repo-browser.
  3. Procure a revisão onde você apagou o arquivo.
  4. Na lista mudança, encontrar o arquivo que você apagou.
  5. Botão direito do mouse sobre o arquivo e vá em "Reverter alterações desta revisão".
  6. Isto irá restaurar o arquivo para sua cópia de trabalho, mantendo história.
  7. Commit o arquivo para adicioná-lo de volta para seu repositório.

Com Tortoise SVN :

Se você não ter cometido as alterações, no entanto, você pode fazer um revert na pasta pai, onde você apagou o arquivo ou diretório.

Se você já cometeu o arquivo excluído, então você pode usar o navegador do repositório, mude para a revisão em que o arquivo ainda existia e, em seguida, use o comando Copiar para ... no menu de contexto. Digite o caminho para a sua cópia de trabalho como o alvo eo arquivo excluído serão copiados a partir do repositório para sua cópia de trabalho.

A maneira mais fácil que eu tenho sido capaz de restaurar arquivos e não histórico de revisão perder está usando cópia SVN , o exemplo merge acima para me parece ser uma maneira mais complexa para conseguir a mesma coisa. Por que há uma necessidade de mesclar quando você simplesmente deseja restaurar uma revisão?

Eu uso o seguinte, neste caso, e ele funciona muito bem.

svn copy -m 'restoring file' -r <rev_number_file_to_restore> http://from/file.cs http://pathTo/file.cs

Eu sempre parecem usar svn copy como uma operação de servidor então não tenho certeza se ele funciona com dois caminhos de trabalho.

Você deve ser capaz de basta verificar o arquivo que você deseja restaurar. Tente algo como svn co svn://your_repos/path/to/file/you/want/to/restore@rev onde rev é a última revisão em que o arquivo existe.

Eu tinha que fazer exatamente isso há pouco tempo e se bem me lembro, usando a opção -r para svn não funcionou; Eu tive que usar a sintaxe :rev. (Embora eu poderia ter lembrado que para trás ...)

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