Se você ainda não leu a primeira parte sugiro que confira o post “Controle de versão: Introdução I” antes de continuar.
Agora que sabemos o que é um branch e como funcionam, podemos seguir um pouco mais e aprendermos a padronização da estrutura de diretórios do controle de versões.
Oficialmente é recomendado que cada projeto seja criado em um repositório exclusivo, para que ele possa evoluir sem interferir nos demais projetos.
Em cada repositório, devem-se criar três pastas, segundo a recomendação oficial:
- trunk
- branches
- tags
Cada pasta tem uma finalidade muito específica e vamos abordar duas hoje (não vamos abordar a tags porque existirá um post apenas para isto).
Inicialmente, vamos para a trunk que é a mais prática de se aprender, justamente por ser a mais comum de se trabalhar.
No diretório trunk estará, de forma simplificada, o código mais recente do projeto. Sim, é pura e simplesmente isto.
Será nesta pasta que os seus programadores irão fazer o checkin do código que foi recentemente alterado, e será dela que o último código deverá ser obtido (geral).
No entanto, imaginem o que aconteceria se um ou mais funcionários receberam a tarefa de criar uma alteração grande. Por exemplo, migrar o sistema inteiro de arquivo de dados (exemplo: TXT ou algo do tipo, mesmo que mais evoluído) para um SGBD.
Se eles submeterem as alterações ali constantemente, pode acabar gerando várias falhas em clientes ou repassar código não-final para outros programadores.
A primeira solução seria uma gambiarra, mas é proposta pelo próprio tutorial do Subversion: os programadores se isolarem (nao realizarem checkin). Pulando alguns problemas que eles levantam, vamos diretamente para dois pontos críticos:
- O computador deles geralmente é mais suceptível a falhas que o servidor, ou seja, o risco de se danificar o código e perder todo o trabalho será elevado.
- Se alguma outra alteração for realizada no sistema no período em que eles não realizaram contato com o sistema CVS a versão deles se tornará defasada e na hora final de checkin pode gerar imprevistos, como incompatibilidade entre métodos que foram alterados durante este tempo.
É nesta hora que chega o segundo diretório de hoje, o branches.
Nele será criada uma nova versão do projeto, isolada, para cada programador que estiver fazendo uma modificação maior e que não queira afetar os demais programadores, pelo momento. Assim ele pode acompanhar a evolução do sistema (pois está realizando checkin/checkout do código-fonte normalmente), terá menos chance de perder ou danificar o código, evitará imprevistos de última hora durante o processo de merge do código alterado.
Versões personalizadas de cada cliente podem compor um ramo mais complexo, surgindo em branches/projeto_1 por exemplo, e contendo a estrutura trunk/branches subordinada ao mesmo.
