Mover Ficheiros De Um Repositório Para Outro com Subversion.

June 30th, 2010

Ontem, num curta sessão de manutenção dos meus repositórios de Subversion, senti necessidade de reorganizar algumas, como creio ser “normal” ao fim de algum tempo. Tendo a organizar o meu SVN como múltiplos repositórios, um por projecto. Dentro de cada repositório tenho os diversos projectos de classes, sites ou aplicações associados. Tenho assim vários repositórios contextualizados e mais pequenos, em vez de um repositório geral com diversos projectos. A única dificuldade que apresenta é o backup / dump que obriga a manter um script com a lista de comandos de “svnadmin dump” para cada repositorio individual.

Também, apenas agora começo a usar a estrutura de pastas típicas do SVN – /trunk, /brenches e /tags, porque só agora tive necessidade de usar tags para marcar algumas situações. Mover as pastas dentre do repositório para incluir esta alteração é bastante simples, e com o ToirtoiseSVN no server, é drag n’ drop.

Durante a reorganização, senti necessidade de mover alguns repositórios – essencialmente de projectos de testes – e uni-los num só repositório contextualizado. Mover pastas dentro de um repositório é muito simples, usando o commando svn move ou usando o RepoBrowser do ToirtoiseSVN Repo Browser. Mas entre repositórios é um pouco mais elaborado. é preciso efectuar o dump do repositórios, e recarrega-lo no novo repositório, preferencialmente indicando a nova pasta para a qual deve ser carregada. A vantagem é que o histórico de alterações é conservada (sofre apenas uma renumeração).

Para fazer o dump, o comando é:

svnadmin dump d:\repoPathToMove > d:\backupFolder\repoName.dump

Para carregar o dump criado:

svnadmin load d:\pathToNewRepo --parent-dir InternalFolder < d:\backupFolder\repoName.dump

De notar a opção –parent-dir onde indico a pasta do repositório para onde os ficheiros devem ser carregados. É necessário criar a pasta no repositório de destino antes de efectuar o load. Caso contrário é levantado um erro e os dump não é carregado. Uma forma mais simpels de o escrever (e sem criar o ficheiro dump) é:

svnadmin dump d:\repoPathToMove | svnadmin load d:\pathToNewRepo --parent-dir InternalFolde