Trunk-based Development vs. Git Flow

Letícia Silva
Único
Published in
3 min readJan 26, 2022
Fonte: unsplash

Para desenvolver um software com qualidade, precisamos ser capazes de rastrear todas as alterações e revertê-las, se necessário. Os sistemas de controle de versão cumprem esta função disponibilizando o histórico do projeto e ajudando a juntar as alterações feitas por várias pessoas.

Além disso, trabalhar em equipes distribuídas é possível principalmente graças a essas ferramentas. Elas permitem que várias pessoas trabalhem em diferentes partes de um projeto ao mesmo tempo e, posteriormente, unam suas alterações em um único projeto.

À medida que os sistemas de controle de versão amadurecem, há uma tendência de aumentar a capacidade de trabalhar em projetos em paralelo.

Atualmente, o sistema de controle de versão mais popular é o Git. O Git é apenas uma ferramenta. Você pode usá-lo de muitas maneiras diferentes.

Atualmente, as estratégias de ramificação mais populares são o Git Flow e o Trunk-based Development.

Git Flow

No Git Flow duas branches sempre existirão master e develop.

Os desenvolvedores criam branches de features a partir da branch develop (linha principal) e trabalham nelas. A branch master é usada como uma branch de produção. Assim que as features vão sendo finalizadas, elas são juntadas na branch develop para posteriormente passarem por uma branch de release. Assim que a versão estiver pronta para ser liberada em produção é feito o merge da branch de release na master. Enquanto isso, novas features podem ser desenvolvidas a partir da branch develop. As correções são organizadas através de branches de hotfix.

O Git Flow não diz nada sobre o tamanho das branches de release, nem a frequência de integração necessária e também não diz que a branch develop deve ser saudável.

Se a velocidade na publicação de novas versões é sua principal preocupação, pode ser um problema sério. As features desenvolvidas podem ter longa duração e merges complexos.

Embora o Git Flow seja muito popular, é comum encontrar pessoas que dizem que estão usando o Git Flow e estão fazendo algo bem diferente.

Trunk-based Development

No Trunk-based Development os desenvolvedores concentram-se em fazer o trabalho na branch master (linha principal). Eles criam branches de curta duração a partir da master, assim que finalizam as tarefas, o código compila e passa nos testes, é realizado o merge do código para a master. O termo “curta duração” significa não mais do que alguns dias, o que provavelmente equivale à Integração Contínua na prática. O desenvolvimento contínuo evita que os desenvolvedores criem conflitos difíceis de resolver.

Algumas práticas que podem ser implementadas para melhorar o uso do Trunk-based Development: criar branches pequenas com funcionalidades parciais; priorizar a revisão de código, para que o código seja mergeado o mais rápido possível com a master, é fundamental ter uma boa cobertura de testes unitários; o processo de build e testes deve ser rápido.

Não existe bala de prata, a ideia não é defender alguma das estratégias, mas explicar como funcionam para ajudar na sua tomada de decisão.

Criar branches é fácil, fazer o merge pode ser difícil. Reflita sobre sua abordagem, se está atendendo bem, se é possível melhorar sua pipeline, considere a frequência aceitável para a integração de suas branches. Procure dobrar sua frequência de integração. As barreiras para integrar com mais frequência geralmente são os pontos que precisam de atenção para melhorar seu processo de desenvolvimento.

Fizemos um grupo de estudo no time que atuo na unico para olhar para o tema e propor melhorias no nosso processo, isso me motivou a compartilhar um dos pontos que consideramos.

Até mais 😉!

Leituras Adicionais

Patterns for Managing Source Code Branches - Martin Fowler
DevOps tech: Trunk-based development
Adopt a Git branching strategy

Letícia Silva é desenvolvedora na unico.

--

--