Actualizar o servidor de Subversion

2009-12-12

Um dos problemas que enfrentei nos últimos dias com o Subversion foram os chamados “tree-conflicts”. São essencialmente conflitos que surgem quando é feito a actualização de um nome de ficheiro e o ficheiro é movido, e alguem depois tem no seu “working copy” uma versão ainda anterior a essa operação. Quando tentam efectuar o commit, vão naturalmente encontrar um erro, por tentarem actualizar um ficheiro que não está presente na revisão.

Segundo encontrei, a versão mais recente (1.6) do SubVersion tem melhor suporte para este tipo de erros agora. Mas primeiro, antes de actualizar, justifica (sempre, mesmo que digam que não é preciso) fazer um backup. O backup é um simples “dump” das revisões para um ficheiro e efectuado pelo comando:

A extensão do ficheiro gerado pode ser um qualquer, mas recomendo o uso de a data. O commando executa uma descarga completa das bases com as diversas revisões para o ficheiro (binário). O ficheiro tende a crescer muito (nalguns casos centenas de MBs) mas é altamente comprimível.

Infelizmente, como podem ver, é uma execução repositório a repositório. Nada como criar um script para realizar a tarefa (ou um programazito para gerir a lista de repositórios e os dumps!) . Este é um passo que deve ser frequente, para quem tem amor à vida e ao trabalho que realiza… a redundância nestas coisas nunca é demais!

O próximo passo é a actualização do serviço (Windows do servidor de SVN). É conveniente reinicializar o serviço no fim do processo de actualização. Também , dependendo de como instala, pode acabar por ter duas instalações do mesmo serviço (por exemplo eu tinha um server de Subversion inicial a correr, e actualizei com o installer do CollabNet. Fique com dois serviços instalados no servidor).

O último passo da actualização é actualizar os repositórios em si, utilizando o comando upgrade:

Novamente um script ou uma pequena aplicação serão muito úteis para auxiliar este processo para o caso de haver muitos repositórios.

Por fim, actualize tb o cliente (Tortoise, etc.) para que trabalhem bem com o server actualizado. Os working copies no cliente são actualizados automaticamente pelo Tortoise assim que houver o contacto.