Subversion: O que acontece com o espaço em disco do servidor SVN ao criar Branch, Tag e Revisions?


Hoje comecei o dia batendo um papo sobre como o Subversion trata a questão do armazenamento de espaço em disco ao criar diferentes Revisions, diferentes Tags e diferentes Branches. Então resolvi registrar nesse post as conclusões e comparações que fiz entre o Subversion e o CVS.

Internamente para o Subversion, Branches e Tags são a mesma coisa. Então, o que vou comentar vale para ambos, ok?

Quando um arquivo é incluído em um repositório e sofre modificações, o Subversion armazena apenas o “diff” entre as versões e não 2 vezes o arquivo inteiro. Nesse caso não se gasta espaço desnecessariamente no lado do servidor.

Na criação de Branches e Tags, o Subversion usa “hard links“. Então, não há duplicação de conteúdo no lado do servidor, o que economiza espaço. Esse é o conceito de “Cheap copies” que o Subversion possui.

O mesmo vale para arquivos binários.

Quem trabalha com Scrum e está na dúvida se deve, por exemplo, criar Branches por Sprints ou um bracnh mais genérico de “desenvolvimento”, parece que o genérico não é a melhor escolha. Isso se você estiver pensando em fazer merges (reintegrate) mais de uma vez a partir do mesmo branch para o trunk. Aqui vale a mesma preocupação que usuários do CVS tinham ao fazer múltiplos merges de um mesmo branch para o trunk. Então, embora possível, a gestão fica mais complicada e por isso a documentação do Subversion recomenda evitar fazer isso. É mais simples, após o merge, criar um novo branch ao invés de continuar o trabalho no branch antigo.

Durante os vários anos que trabalhei com o Subversion eu fazia o mais complicado, ou seja, múltiplos merges de um mesmo branch para o trunk. Isso tinha uma razão, que escreverei em um novo post.

Até lá!

Deixe um comentário