O que é trunk based development (desenvolvimento baseado em tronco)
Trunk based development é um modelo de controle de versão, onde os desenvolvedores trabalham em pequenas atualizações, e centralizam seu código em uma única ramificação chamada ‘tronco’, que na maioria das vezes vai ser a branch master ou main. Nesse modelo é evitado ao máximo criar ramificações com ciclo de vida longo, para não ocorrer problemas nas mesclagens de código.
Esse modelo se enquadra bem para projetos que exigem uma entrega contínua de código, pois ele preza em criar ramificações com ciclo de vida curto, fazendo com que seja mais fácil ter o controle da ramificação principal do projeto, além de facilitar a prática de code reviews e deploys diários.
Por conta da ramificação principal receber merge request constantes, é necessário possuir configurado um pipeline com testes automatizados e validadores de qualidade de código, para que todos commits que estejam na ramificação principal, estejam aptos para serem disponibilizados em produção.
Exemplo da ramificação:
Principais características do trunk based development
As ramificações devem ter ciclos de vida curto, ficando sempre perto da ramificação principal.
A Ramificação principal sempre precisa estar em estado de pronto para deploy em produção.
Os hotfixes precisam ser criados a partir da ramificação principal e serem devolvidos à ramificação principal.
Recomendado para aplicações: Micros serviços, single page application, Prova de conceito (POC), Sistemas distribuídos.
É preciso ter um processo de integração contínua, com etapas de testes automatizados e validadores de qualidade de código.
O que é Gitflow
Gitflow é um modelo criado para manter um fluxo de trabalho mais organizado e facilitado para realização do versionamento do código. É um modelo para projetos que possuem vários desenvolvedores trabalhando no mesmo projeto, e também softwares que possuem entregas de versão agendadas. Esse modelo trabalha com branches, onde cada uma possui uma responsabilidade.
Branch Main ou Master: Essa é a ramificação espelho do código que está em produção, só é realizado mesclagem de código nessa ramificação através de Hotfix ou nova Release.
Branch Develop: Essa ramificação é o código que possui novas funcionalidades da aplicação, e através dessa ramificação que se cria novas ramificações de Feature.
Branch Feature: É uma ramificação temporária criada a partir da “Develop”, nessa ramificação o desenvolvedor vai criar as novas funcionalidades da aplicação, e assim que finalizar ela deve ser obrigatoriamente devolvida a branch “Develop”.
Branch Hotfix: É uma ramificação temporária criada a partir da Main / Master, essa ramificação serve para corrigir problemas que ocorreram em ambiente de produção e possuem urgência para ser realizado. No final do seu ciclo de vida ela é mesclada nas ramificações Main / Master e também na Develop.
Branch Release: É a ramificação responsável por unir todas as atualizações prontas e então é feito a mesclagem na branch principal Main ou Master. Após esse processo é criado a tag para controle de versão.
Exemplo das ramificações utilizando o GitFlow:
Principais características do Gitflow
Os recursos novos são iniciados a partir da ramificação Develop, e podem possuir um ciclo de vida mais longo.
A branch Release é criada a partir da branch Develop e deve ser devolvida a branch Develop após a implementação da release estiver estabilizada.
Somente hotfixes são criados a partir da Main / Master.
Recomendado para produtos complexos, maduro e monolítico.
Frequência de lançamento é mais lenta, e geralmente possui um cronograma pré-determinado.
Conclusão
Nesse artigo, foi apresentado as principais características do trunk based development e Gitflow, a escolha de qual modelo utilizar vai depender do projeto e estratégia que o produto possui. Geralmente projetos com uma alta frequência de deploy ou que estão bem no início, utilizam o trunk based development. Já projetos que possuem um produto mais maduro, que tem datas agendadas para disponibilizar novos recursos, utilizam o Gitflow.
Antes de escolher algum desses fluxos é importante realizar um estudo aprofundado e levantar as vantagens e desvantagens de cada fluxo.
Referência:
https://trunkbaseddevelopment.com/
https://www.devbridge.com/articles/branching-strategies-git-flow-vs-trunk-based-development/
https://www.alura.com.br/artigos/git-flow-o-que-e-como-quando-utilizar