Modern Git Workflow - A Simpler Way to Release Your Software
Git Workflow Moderno - Uma maneira mais simples de lançar seu software.
Tenho trabalhado a um tempo com vários fluxos Git para entrega de software dos mais variados sabores. Mas em essência, são alguma variação do famoso Gitflow. Porém o Gitflow funciona bem para o cenário relatado pelo prṕrio autor, mas existem alguns problemas para outros cenários.
Devido a esses problemas, o que tenho percebido nos projetos e equipes que venho trabalhando, é que as equipes precisam sempre fazer algum tipo de adaptação para usar o Gitflow em seu próprio contexto. Ao final, à pesar de dizerem estar usando o Gitflow, na verdade não estão. Estão usando um fluxo personalizado baseado em Gitflow.
Organizações notáveis também fizeram suas próprias personalizações baseadas no Gitflow. Como GitHub com seu GitHub flow, e GitLab com seu GitLab flow. Costumam dizer que se trata de uma versão "mais leve" do Gitflow.
O GitLab chegou até a registrar os problemas do Gitflow que os levaram a criar o GitLab flow neste artigo entitulado "The problem with Git flow".
Obviamente essas organizações à pesar de resolverem o problema, puxam bastante a sardinha para suas brasas. Normalmente acabam vinculando o fluxo Git que desenvolveram com suas ferramentas de gerenciamento de problemas.
O que quero aqui é propor um fluxo que considere as vantagens do Gitflow, mas também considere cenários modernos do desenvolvimento de software, e que abstraia a parte de gestão de projeto ou problemas, sem puxar a sardinha para quaisquer que sejam as ferramentas que venham a ser usadas.
Portanto, eis aqui nossos 10 objetivos:
- Ser naturalmente adaptável
- Ser compatível com Thunk Based Development
- Ser compatível com Feature Based Development
- Suportar manutenção de múltiplas versões
- Suportar versionamento semântico SemVer
- Ser compatível com integração contínua
- Ser compatível com implantação contínua
- Ser compatível com entrega contínua
- Ser compatível com desenvolvimento de softwares em containers
- Ter uma documentação simples disponível