Ramifique recursos em seu caminho para a grandeza

Ou use ramificação de tarefas para chegar lá. Ou ramificação de liberações. Você escolhe.

Dan Radigan Dan Radigan
Buscar tópicos

Quase todos os sistemas de controle de versão atuais dão suporte a ramificações – independentemente das linhas de trabalho que resultam de uma base de código central. Dependendo do sistema de controle de versão, o branch principal pode ser chamada de mestre, principal, padrão ou central. Os desenvolvedores podem criar as próprias ramificações da linha de código principal e desenvolver o código independente em paralelo. 

Por que se preocupar com a ramificação?

A ramificação permite que equipes de desenvolvedores colaborem facilmente dentro de uma base de código central. Quando um desenvolvedor cria uma ramificação, o sistema de controle de versão cria uma cópia da base de código nesse ponto no tempo. As alterações na ramificação não afetam outros desenvolvedores da equipe. Isso é bom, obviamente, porque recursos em desenvolvimento podem criar instabilidade, e seria altamente perturbador se todo o trabalho acontecesse na linha de código principal. Mas as ramificações não precisam viver em confinamento. Os desenvolvedores podem facilmente usar alterações de outros desenvolvedores para colaboração em recursos e para garantir que a ramificação privada não divirja muito da principal.

Dica profissional

As ramificações não são boas apenas para recursos. As ramificações podem isolar a equipe de alterações arquitetônicas importantes, como atualização de estruturas, bibliotecas comuns, etc.

Três estratégias de ramificação para equipes ágeis

Os modelos de ramificação muitas vezes diferem entre as equipes e são tema de muito debate na comunidade de software. Um grande tema é quanto trabalho deve permanecer em uma ramificação antes se executar a mescla de volta à ramificação mestre. 

Ramificar liberações

Ramificações de liberação fazem referência à ideia de que uma liberação está contida inteiramente dentro de uma ramificação. Isto significa que, no final do ciclo de desenvolvimento, o gerente de liberação vai criar uma ramificação a partir da principal (por exemplo, "ramificação de desenvolvimento 1.1"). Todas as alterações na versão 1.1 precisam ser aplicadas duas vezes: uma vez na ramificação 1.1 e, em seguida, na linha de código principal. Trabalhar com duas ramificações é trabalho extra para a equipe e é fácil de esquecer de mesclar as duas ramificações. Ramificações de liberação podem ser difíceis de gerenciar, pois muitas pessoas estão trabalhando na mesma ramificação. Todos já tivemos o trabalho de mesclar muitas alterações diferentes em uma única ramificação. Se você precisar fazer uma ramificação de liberação, crie a ramificação do modo mais próximo possível da atual. 

Aviso:

A ramificação de liberação é uma parte importante do suporte ao software com versão no mercado. Um único produto pode ter várias ramificações de liberação (por exemplo, 1.1, 1.2, 2.0) para apoiar o desenvolvimento sustentável. Não se esqueça de as alterações nas versões anteriores (ou seja, 1.1) podem precisar ser mescladas às ramificações de versões de liberação (ou seja, 1.2, 2.0). Confira o webinar abaixo para saber mais sobre como gerenciar ramificações de liberação com o Git.

Ramificação de recurso

Ramificações de recurso são, muitas vezes, acopladas a sinalizadores de recurso–"alternações" que ativam ou desativam um recurso dentro do produto. Isso torna mais fácil a implementação do código no branch principal e o controle quando o recurso é ativado, facilitando a implementação inicial do código bem antes de o recurso ser exposto aos usuários finais. 

Dica profissional:

Outro benefício dos sinalizadores de recursos é que o código pode permanecer dentro da build, mas inativo enquanto estiver em desenvolvimento. Se algo der errado quando o recurso estiver ativado, um administrador do sistema pode reverter o sinalizador do recurso e retornar a um bom estado conhecido, em vez de precisar implementar uma nova build.

Ramificação de tarefa

Na Atlassian, focamos em um fluxo de trabalho de ramificação por tarefa. Toda empresa tem uma maneira natural de dividir o trabalho em tarefas individuais dentro de um rastreador de itens, como o Jira Software. Os itens passam a ser o ponto de contato central da equipe para esse trabalho. A ramificação de tarefas, também conhecida como ramificação de itens, conecta diretamente esses itens ao código-fonte. Cada item é implementado na própria ramificação, com a chave do item incluída no nome da ramificação. É fácil ver qual código implementa qual item: basta procurar a chave do item no nome da ramificação. Com esse nível de transparência, é mais fácil aplicar alterações específicas à ramificação mestre ou a uma ramificação de liberação legada em execução mais antiga.

Como o método ágil é centrado em torno de histórias do usuário, as ramificações de tarefa complementam o desenvolvimento ágil. Cada história do usuário (ou atualização de segurança) fica dentro da própria ramificação, tornando mais fácil ver quais questões estão em andamento e quais estão prontas para liberação. Para um entendimento mais abrangente sobre a ramificação de tarefa (às vezes chamada de ramificação de questão ou ramificação por questão), pegue a pipoca e confira o webinar abaixo – um dos mais populares que a gente oferece. 

Conheça agora o gêmeo do mal da ramificação: a mesclagem

Todos já tivemos o trabalho de integrar várias ramificações em uma solução sensata. Tradicionalmente, os sistemas de controle de versão centralizados, como o Subversion, tornaram a mesclagem uma operação muito difícil. Mas sistemas de controle de versão mais novos, como Git e Mercurial, adotam uma abordagem diferente para monitorar versões de arquivos em diferentes ramificações.

As ramificações tendem a ser de curta duração, o que faz com que elas sejam mais fáceis de mesclar e mais flexíveis em toda a base de código. Entre a capacidade de frequente e automaticamente mesclar ramificações como parte da integração contínua (IC) e o fato de que ramificações de curta duração simplesmente têm menos alterações, o "inferno da mesclagem" é coisa do passado para as equipes que usam Git e Mercurial.

É isso que torna a ramificação de tarefa tão incrível! 

Validar, validar, validar

Um sistema de controle de versão só pode ir até aí em relação a afetar o resultado de uma mesclagem. Testes automatizados e integração contínua também são críticos. A maioria dos servidores de IC pode colocar novas ramificações sob teste automaticamente, reduzindo drasticamente o número de "surpresas" após a mesclagem final upstream e ajudando a manter a linha de código principal estável.