Recuperar arquivos removidos em projetos SVN

O subversion mantem o histórico permanente de todas as alterações, e seu banco de dados Local. Por tanto, de fato nada é realmente removido. :D

Para recuperar o arquivo que foi removido na revisão HEAD, ou posterior; são dois passos:
  1. svn merge -r [current_version]:[previous_version] [repository_url] [work_dir]
  2. svn commit|ci -m “Reverter submissão anterior e voltar para a revisão [previous_version].” [work_dir]


Exemplo:
Suponha que o projeto FileSystemStorage, tenha sido acrescentado ao repositório sob a url https://svn.incolume.com.br/projetosweb/Plone3/FileSystemStorage/20110121, na revisão 3485, e no decurso de evolução, o subdiretório zmi, tenha sido removido na revisão 3757; com o andamento do projeto, descobriu-se que a remoção foi equivocada, e faz-se necessário recuperar o subdiretório zmi na revisão HEAD.

Histórico de evolução:
svn log https://svn.incolume.com.br/projetosweb/Plone3/FileSystemStorage/20110121
------------------------------------------------------------------------
r3757 | ricardobn | 2012-11-07 11:08:50 -0200 (Qua, 07 Nov 2012) | 1 line

ajuste de correção em svn.incolume.com.br
------------------------------------------------------------------------
r3485 | deyselo | 2012-02-09 14:08:09 -0200 (Qui, 09 Fev 2012) | 7 lines

importe do FileSystemStorage 20110121
------------------------------------------------------------------------

Listagem de conteúdo de quando o projeto foi acrescentado:
svn ls -r 3485 https://svn.incolume.com.br/projetosweb/Plone3/FileSystemStorage/20110121
ABOUT
CHANGES
Extensions/
FSSTool.py
FileSystemStorage.py
FileUtils.py
LICENSE
README.txt
TESTED_WITH
__init__.py
bin/
config.py
configuration/
configure.zcml
doc/
etc/
examples/
i18n/
patches.py
product.txt
rdf.py
skins/
strategy.py
tests/
tool.gif
traversable.py
utils.py
version.txt
zmi/

Listagem de conteúdo atual do projeto:
svn ls -r HEAD https://svn.incolume.com.br/projetosweb/Plone3/FileSystemStorage/20110121
ABOUT
CHANGES
Extensions/
FSSTool.py
FileSystemStorage.py
FileUtils.py
LICENSE
README.txt
TESTED_WITH
__init__.py
bin/
config.py
configuration/
configure.zcml
doc/
etc/
examples/
i18n/
patches.py
product.txt
rdf.py
skins/
strategy.py
tests/
tool.gif
traversable.py
utils.py
version.txt

Procedimentos


  1. Se não houver uma cópia de trabalho (ou diretório de trabalho), realize um checkout:
    svn co https://svn.incolume.com.br/projetosweb/Plone3/FileSystemStorage/20110121 FileSystemStorage
  2. Execute o Merge entre as revisões atual (HEAD) e a desejável (neste exemplo a 3485):
    svn merge -r HEAD:3485 https://svn.incolume.com.br/projetosweb/Plone3/FileSystemStorage/20110121 FileSystemStorage
    Que gera uma saída como abaixo:
    --- Reverse-merging r3781 through r3486 into 'FileSystemStorage':
    A FileSystemStorage/zmi
    A FileSystemStorage/zmi/manage_overview.zpt
    A FileSystemStorage/zmi/manage_documentation.zpt
  3. E finalmente, persistir a recuperação na revisão HEAD:
    svn commit FileSystemStorage -m "Reverter submissão anterior e voltar para a revisão 3485."
    ou
    svn ci FileSystemStorage -m "Reverter submissão anterior e voltar para a revisão 3485."
    ou
    svn ci -m "Reverter submissão anterior e voltar para a revisão 3485." FileSystemStorage
    Que gera uma saída como abaixo:
    Área de autenticação: Acesso ao SVN
    Senha para 'ricardobn':
    Adicionando FileSystemStorage/zmi
    Adicionando FileSystemStorage/zmi/manage_documentation.zpt
    Adicionando FileSystemStorage/zmi/manage_overview.zpt

    Commit da revisão 3782.
  4. Confirmando a restauração dos arquivos:
    No diretório de trabalho:
    svn up FileSystemStorage
    Na revisão 3782.
    svn info FileSystemStorage
    Caminho: FileSystemStorage
    URL: https://svn.incolume.com.br/projetosweb/Plone3/FileSystemStorage/20110121
    Raiz do Repositório: https://svn.incolume.com.br/projetosweb
    UUID do repositório: abb6bb25-ce59-4e2c-be90-e59af73e82e1
    Revisão: 3782
    Tipo de Nó: diretório
    Agendado: normal
    Autor da Última Mudança: ricardobn
    Revisão da Última Mudança: 3782
    Data da Última Mudança: 2012-12-07 15:55:00 -0200 (Sex, 07 Dez 2012)
    svn ls FileSystemStorage
    ABOUT
    CHANGES
    Extensions/
    FSSTool.py
    FileSystemStorage.py
    FileUtils.py
    LICENSE
    README.txt
    TESTED_WITH
    __init__.py
    bin/
    config.py
    configuration/
    configure.zcml
    doc/
    etc/
    examples/
    i18n/
    patches.py
    product.txt
    rdf.py
    skins/
    strategy.py
    tests/
    tool.gif
    traversable.py
    utils.py
    version.txt
    zmi/

    No repositório SVN:
    svn ls https://svn.incolume.com.br/projetosweb/Plone3/FileSystemStorage/20110121
    ABOUT
    CHANGES
    Extensions/
    FSSTool.py
    FileSystemStorage.py
    FileUtils.py
    LICENSE
    README.txt
    TESTED_WITH
    __init__.py
    bin/
    config.py
    configuration/
    configure.zcml
    doc/
    etc/
    examples/
    i18n/
    patches.py
    product.txt
    rdf.py
    skins/
    strategy.py
    tests/
    tool.gif
    traversable.py
    utils.py
    version.txt
    zmi/

Referências

http://brito.blog.incolume.com.br/2012/06/svn-book.html
http://brito.blog.incolume.com.br/2012/10/usando-o-subversion.html
http://subversion.apache.org/docs/
http://svnbook.red-bean.com/

Comentários