Conceitos do controle de versão: Criando Branchs e Tags utilizando Tortoise SVN

Umas das operações mais comuns no ambiente de desenvolvimento da TecnoSpeed quando o assunto é o repositório do código fonte, com certeza é a criação de Branchs e Tags . Mas o que são exatamente? Qual a diferença entre essas duas operações?

A TecnoSpeed utiliza o controlador de versões Subversion® através da ferramenta open-source TortoiseSVN. Nesse Post será considerado que os conceitos básicos do controle de versão como: Repository, revision, trunk, update, commit, revert, checkout, externals já são conhecidos.

Uma das características dos sistemas de controle de versão é a capacidade de isolar alterações em uma linha separada de desenvolvimento. Esta linha é conhecida como uma Branch . Branchs são freqüentemente usadas para implementar novas funcionalidades, sem alterar a linha principal (ou Trunk ) de desenvolvimento com erros de compilador e bugs. Assim que o novo recurso é estável o suficiente, então a Branch de desenvolvimento é integrada de volta para a linha principal Trunk .

Outra característica dos sistemas de controle de versão é a capacidade para marcar revisões particulares (por exemplo, a revisão de uma build de um componente cuja release foi liberada), para que seja possível a geração dessa mesma release caso for necessário. Essa revisão “congelada” é conhecida como Tag .

Logo de cara podemos dizer que a diferença básica entre uma Branch e uma Tag é que a Branch é utilizada para adicionar correções ou novas funcionalidade sem alterar o Trunk de determinando produto, enquanto a Tag é um estado fixo no qual determinado produto possui um conjunto de funcionalidades que não serão mais alteradas.

Em nosso dia a dia no desenvolvimento uma Branch é gerada e builds dos produtos são gerados em cima dessa Branch para testes do setor de qualidade. Caso um problema seja encontrado, a correção é feita primeiramente na Branch para depois ser transferida para o Trunk do produto.

Quando determinado build de um produto é aprovado pela equipe da qualidade, é criado uma Tag da branch para “congelar” o ponto onde o produto e suas funcionalidades foi aprovado. Note que uma vantagem desse processo é deixar a equipe de desenvolvimento trabalhando normalmente no Trunk do produto, enquanto testes e correções são feitas pela equipe de qualidade na branch .

Outra diferença entre Branch e Tag que encontramos em nosso dia a dia é que na Branch os externals não são “congelados” no momento da criação da branch, isso permite que posteriormente os externals podem ser trocados na branch .

Em uma Tag os externals são “congelados”, ou seja, ficam fixos na Tag e não podem ser trocados posteriormente.

Figura 1.

Na Figura 1 temos a linha Azul representando a Trunk do repositório onde a equipe de desenvolvimento trabalha no dia a dia, fazendo novas funcionalidades e correções. As linhas Amarelas representam as Branchs criadas a partir da Trunk , note que alterações e correções podem ser feitas no decorrer do tempo. As setas Vermelhas representam as Tags , veja que elas são estáticas na linha do tempo das Branchs , ou seja, não permitem alterações.

Uma Tag também pode ser criada a partir do Trunk caso seja necessário.

Agora vamos a exemplos de criação de Branch e Tag . Nesse exemplo será utilizado o repositório do componente NFe.

Criação da Branch.

  1. Com o botão direito clique na pasta do componente NFe, e no menu que aparece escolha TortoiseSVN->Branch/Tag conforme figura 2.

Figura 2

  1. Na tela que aparece a seguir clique no botão a direita conforme figura 3.

Figura 3.

  1. Na tela que se abre a Url do repositório estará no Trunk do produto, na estrutura de pastas a esquerda clique na pasta Branches, que é o local onde todas as branches devem ser criadas conforme figura 4.

Figura 4.

  1. Após abrir a pasta onde estão as branches escolha a pasta componente/nfe conforme figura 5.

Figura 5.

  1. Note que após clicar na pasta do componente NFe, do lado direito é possível ver todas as branches geradas. Clique na pasta que possui a versão mais recente e logo depois no botão OK conforme figura 6.

Figura 6.

  1. Na tela em seguida altere no campo To Path a versão ou nome da branch conforme as regras definidas no desenvolvimento. Depois preencha o ticket e o comentário referentes a criação da branch. Note que no campo Set Explicit revision for these externals (número 3 da figura 7) todos os check box devem estar desmarcados, isso garante que os externals não serão congelados. Logo após clique no botão OK.

Figura 7.

  1. Pronto a Branch foi criada!

Criação da Tag.

A criação de uma Tag segue os mesmos passos da criação da branch, com algumas diferenças, que são elas:

  1. No passo 3 escolha a pasta Tags no repositório, conforme figura 8.

Figura 8.

  1. No passo 4 e 5 escolha igualmente a pasta componente/nfe e selecione a Tag mais recente e clique em OK , conforme figura 9.

Figura 9.

  1. No passo 6 a única e importante diferença é marcar todos os check box referentes ao externals do componente NFe. Com isso eles serão “congelados” e não poderam ser modificados posteriormente. Conforme figura 10.

Figura 10.

  1. Pronto, Tag foi criada com sucesso!

Uma observação em relação ao processo de criação da Tag é que ela pode ser criada em cima de uma revisão especifica. Para isso basta escolher a opção “Specific revision in repository” e depois clicar no botão “Show Log” e escolher a revisão conforme figuras 11 e 12.

Figura 11.

Figura 12 (Após clique no botão “Show Log”).

Após escolher a revisão é só continuar conforme passo 3 e Figura 10.