Gerenciando Branchs com TFS 2010

Quando estamos gerenciando o ciclo de vida de um sistema, podemos nos deparar com desenvolvimento paralelo entre as equipes, onde uma parte da equipe é responsável pela codificação de um módulo (pacote 1) e outra parte da equipe por outro módulo (pacote 2) e como podemos ter as equipes trabalhando simultaneamente nessas duas frentes? Como vamos conseguir publicar os pacotes separadamente? A resposta é com Branchs!

O que é uma Branch?

Branch é uma forma de organizar seu código fonte para que possamos trabalhar em versões diferentes sem afetar um ao outro, em outras palavras, uma branch nada mais é do que uma cópia do seu projeto.

Existem várias abordagens para gerenciamento de branchs, a que estou usando atualmente é a apresentada na figura abaixo:

A branch Base é onde nosso sistema vai ter a versão que está estabilizada e que está em produção, a partir da Base criamos os nossos pacotes onde os desenvolvedores vão codificar novas funcionalidades, quando esses pacotes estiverem homologados pelo cliente realizamos o merge com a nossa Base e geramos um novo build para produção.

Como criar uma Branch?

Quando estamos usando o TFS 2010 é muito fácil criar uma branch, para isso entre no source control do seu projeto clique com o botão direito do mouse sobre a pasta Base, onde se encontra o nosso código fonte, e selecione a opção Branching and Merging -> Branch, conforme a figura abaixo

Agora vamos criar a nossa Branch baseado na última versão, adicione o nome de Pacote1 e na opção Branch from version selecione a opção Lasted Version

Status da criação da nossa nova Branch

Faça o mesmo processo para criar a branch Pacote2, depois de criado, em nosso sorce control deve estar conforme a figura abaixo

Exemplo

Abaixo vou fazer um pequeno exemplo adicionando arquivos no Pacote1 e no Pacote2 e depois realizar o merge desses pacote com a Base, veja a figura abaixo para comparar o conteúdo de cada Branch

Realizando o Merge com a Base

Agora vamos realizar o merge dos pacotes com a Branch Base, para isso clique como botão direito sobre a branch Pacote1 e selecione a opção Branching and Marging -> Merge conforme a imagem abaixo

Será aberto um wizard para realizar o merge, onde vamos configurar o Source (DE) e o Target (PARA) e clique em Next,  veja a imagem abaixo

Agora selecionamos que queremos fazer o merge da última versão, e clique em Next

E para finalizar, clique em Finish

Depois de finalizado podemos observar que a nossa Branch encontra-se em processo de merge, veja a figura abaixo

O que temos que ver é se o merge gerou algum conflito, o que geralmente acontece, para isso na janela Pending Changes clique no último ícone para ver os conflitos

A melhor maneira de resolver os conflitos é manualmente usando a ferramenta de merge do próprio Visual Studio, para isso clique no arquivo que gerou conflito e clique em Merge Change In Merge Tool

Será aberta uma ferramenta onde podemos comparar e fazer o merge manualmente, do lado esquerdo é o arquivo que está no Pacote1, do lado direito o arquivo da Base e abaixo com o arquivo vai ficar como merge.

Veja que nesse primeiro conflito aconteceu porque na branch Pacote1 temos o aquivo Pacote1Controller.cs e na branch Base não temos esse arquivo, por isso temos que adicionar essa linha (em azul) para a branch Base, basta clicar em cima da linha para que ela seja adicionada na branch Base, veja na imagem abaixo

Depois clique em Next Change para verificar se possui novos conflitos, e veja que temos mais um conflito referente ao arquivo Pacote1/Index.cshtml, temos que seguir a mesma lógica, clicar na linha azul para resolver o conflito

Clique em Next Change até que todos os conflitos sejam resolvidos e depois clique e OK, uma mensagem de confirmação será exibida para salvar o arquivo

Veja que agora temos apenas um arquivo com conflito, clique em Merge Change In Merge Tool novamente para resolver os conflitos

Será aberta a mesma janela para resolver o conflito, nesse caso é o link do menu que temos que adicionar em nossa branch Base,

Resolva todos os conflitos e depois clique em OK, depois de todos os arquivos que tinham conflitos serem resolvidos a janela ficará vazia

Agora é só compilar o projeto e dar um Check-In

Faça esses mesmos passos para realizar o merge com a branch do Pacote2, no final a nossa branch Base deverá conforme a imagem abaixo

Conclusão

O processo de branch é muito simples e fácil, o que temos que tomar muito cuidado é na hora do merge, geralmente quando falamos de merge a primeira palavra que vem em nossa mente “isso vai dar merda!”  e eu concordo com esse pensamento, se não perdermos tempo e atenção para gerenciar esse merge com certeza vai dar merda, essa é a etapa onde temos que ter um responsável pela essa atividade

Outra sugestão é usar ferramentas de merge para auxiliar esse procedimento, deixo uma dica de uma ferramenta muito boa chamada Araxis que se integra com o Visual Studio e com o TFS

Para mais informações sobre Branch, o time de ALM da Microsoft criou um guia para estudos que pode ser baixado aqui

Aquele abraço!

Sobre Leandro Prado

Leandro Silveira Prado é Premier Field Engineer na Microsoft especializado em Application Lifecycle Management.