o seu Fluxo de Trabalho no Git

Como gerenciar o ambiente de desenvolvimento dos meus projetos no Github com Git usando as branches de forma produtiva e com clareza nos versionamentos é determinando item no resultado do projeto. Quero desenhar um fluxo de trabalho com Git para usar no Github para dominar esse processo.

Desenvolvendo meus projetos pessoais ou realizando treinamentos em front-end web, trabalho sozinho mas acredito que gerenciar as versões dos meus projetos é importante para manter uma documentação organizada e também garantir que essas aplicações estejam funcionando conforme eu gostaria.

Outro ponto interessante é a tentativa de simular o ambiente de uma equipe, entendendo a necessidade de desenhar um processo de fluxo de trabalho com as branches conforme as features concluídas.

Pesquisei no Google “gitflow branches” e “desenhar um gitflow” para seguí-lo nos projetos no Github.

Antes da construção de meu processo, já me deparei com algumas definições que devem ser esclarecidas.

Na verdade, o que eu procuro é construir um fluxo de trabalho que me atenda no desenvolvimento das minhas aplicações sendo assim, situações que estou desenvolvendo sozinho.

Outro ponto, é dominar um fluxo um pouco mais complexo em casos onde possa vir desenvolver algum projeto com outro programador ou até mesmo, caso esteja trabalhando em uma equipe, esse processo já seja algo de domínio.

O Wikipedia exibe a definição de fluxo de trabalho como sendo : “ a sequência de passos necessários para se automatizar um processo, de acordo com um conjunto de regras definidas, permitindo que sejam transmitidos de uma pessoa para outra.”.

Um fluxo de trabalho qualquer

Um dos tipos de fluxo de trabalho com git aplicado no mundo de desenvolvimento de aplicações, mas nada impede de se aplicar em outros cenários e negócios onde há a necessidade de se construir em equipe, corrigir erros, integrar versões e manter tudo isso documentado.

Além disso, esse fluxo de trabalho no git nos permite concluir as tarefas do projeto em sequência, em paralelo, manter a aplicação em produção e realizar correções sem impactar uma tarefa na outra.

O Fluxo de Trabalho Git chamado Gitflow

Vamos detalhar esse workflow e suas regras.

Encontrei um artigo do Portal Atlassian Bitbucket com título Fluxo de Trabalho de Gitflow que detalha esse processo de versionamento de código e ressalta as possibilidades desse fluxo de trabalho com Git.

Esse artigo descreve detalhes do gitflow, um dos fluxos de trabalho com git. Define um modelo de ramificação rigoroso projetado com base no lançamento do projeto.

Entrando nas branches, temos a master, aonde estará nosso projeto em produção, nosso código funcionando corretamente, sem erros.

A outra branch principal, é a develop, sendo uma ramificação de desenvolvimento para integração para recursos (feature).

Essas duas branches são as ramificações do nosso projeto responsáveis por registrar o histórico do projeto.

  1. criar a branch : git branch develop
  2. subir essa branch para o projeto remoto : git push -u origin develop

A branch master já está criada quando inicializamos o git no nosso projeto.

Agora, vamos às branches de suporte. A nossa terceira branch no projeto, a primeira de suporte, é a branch feature, tradução é recurso, já sugere que trata-se da ramificação que irá ser o desenvolvimento de uma nova funcionalidade. Essa branch tem interação direta com a branch principal, develop.

  1. estar na branch develop : git checkout develop
  2. criar a branch de recurso : git checkout -b feature
  1. estar na branch develop : git checkout develop
  2. mesclar a ramificação de recurso (feature) na ramificação de desenvolvimento (develop) : git merge feature

Então, finalizar a ramificação recurso (feature). Diferente das branches principais, as branches de suporte são finalizadas assim que mergeadas com uma das principais, e encerrado seu ciclo de vida.

Uma ilustração de merge entre a ramificação develop e três ramificações features.

A nossa quarta branch desse processo, a segunda de suporte que vamos conhecer é a ramificação de lançamento (release).

A ramificação de desenvolvimento recebeu os recursos (feature) para o próximo lançamento. Nesse momento, ocorre as correções de bugs e é feita a documentação. A criação da ramificação de lançamento (feature) é uma bifurcação da ramificação de desenvolvimento (develop). E assim, essa branch de lançamento recém criada possui:

i. todos os recursos desenvolvidos e planejados para esse lançamento;

ii. correções de bugs dos recursos para esse lançamento;

iii. a documentação;

Terminada as correções e feita a documentação, mesclamos com o branch principal e marcamos com um número de versão.

Após realizar o merge, também com a de desenvolvimento para atualizar e seguir novo ciclo.

  1. estar na branch develop : git checkout develop
  2. criar a branch release com a devida versão : git checkout -b release/0.1.0

Conhecemos quatro branches desse fluxo de trabalho que estamos estudando: a ramificação de recurso (feature), a ramificação de desenvolvimento (develop), a ramificação de lançamento (release), a ramificação principal (master).

Agora, vamos a branch de tratamento dos bugs, a hotfix. As ramificações de hotfix são de manutenção para erros urgentes, e assim solucionar esses bugs as colocam ligadas diretamente com a master.

Após ser concluída a correção, deve-se mesclar com a master e com a develop. Essa branch de correção permite abordar os problemas e corrigir os bugs críticos sem ter que interromper o fluxo de trabalho para esperar o próximo ciclo de lançamento.

  1. estar na branch master : git checkout master
  2. git checkout -b hotfix/minhabranch

A seguir, temos uma ilustração desse processo de correção. Nesse exemplo, após a correção, a versão acrescenta um versionamento ao terceiro item da tag.

Uma ilustração de fluxo quando há bug crítico (hotfix) a ser corrigido.

Vamos a uma demonstração dos comandos que realizamos para a execução desse fluxo de trabalho com git.

git checkout master” — estar na branch master

git checkout -b develop” — criar a branch develop

git checkout -b feature/v1.0.0” — criar a branch feature/v1.0.0, e estar na nova criação.

work happens on feature branch — o trabalho acontece na branch de recurso.

Agora é momento que trabalhos na branch, realizando commits com descrição seguindo uma descrição e fazendo sentido cronológico de desenvolvimento.

Terminado o desenvolvimento desse recurso, seguimos o fluxo de trabalho no git.

git checkout develop” — estar na branch de desenvolvimento

git merge feature/v1.0.0” — mergear na develop da nossa feature/v1.0.0. Trazendo o que desenvolvemos desse recurso para a nossa branch develop.

Atenção. Estamos em uma branch e ao realizarmos o merge nós trazemos de outra branch para a que estamos o código para essa integração na branch que estamos.

git checkout master” — estar na branch master

git merge develop” — mergear na master da develop. Trazendo da branch develop o conteúdo na branch que estamos que é a master.

git branch -d feature/v1.1.0” — criar a branch feature/v1.1.0 apontando para o mesmo commit em que estamos.

Essa sequência de código é o fluxo de trabalho com git para criarmos um recurso, e seguir todo o fluxo até um novo recurso ser criado para nosso desenvolvimento ser inicializado.

A seguir, vamos ao fluxo de ramificação de hotfix.

git checkout master

git checkout -b hotfix/botao-criar-novo

work is done commits are added to the hotfix— o trabalho é feito e commits são adicionados na branch hotfix/botao-criar-novo.

git checkout develop — estar na branch develop

git merge hotfix/botao-criar-novo mergear o código desenvolvido da hotfix na develop.

git checkout master — estar na master

git merge hotfix/botao-criar-novo mergear o código da hotfix na master

Lembrando que um merge acontece na branch que estamos com o código da branch que citamos no comando.

Resumindo, o fluxo de trabalho geral do gitflow com git que estamos estudando é um processo que facilita e muito a documentação, o registrar a trajetória do trabalho em equipe, tratar erros, realizar as tarefas em paralelo ou em sequência. Vamos aos passos.

  1. uma ramificação de desenvolvimento (develop) é criada a partir da ramificação principal (master)
  2. uma ramificação de lançamento (release) é a criada a partir da branch de desenvolvimento (develop)
  3. as ramificações de recursos (feature) são criados a partir das ramificações de desenvolvimento (develop)
  4. quando um recurso (feature) é concluído, então é mesclado na ramificação de desenvolvimento (develop)
  5. quando a ramificação de lançamento (release) é concluída, então é mesclada nas ramificações de desenvolvimento (develop) e principal (master).
  6. caso um problema, crítico, urgente, seja detectado na branch principal (master), uma ramificação de hotfix é criada a partir da principal (master)
  7. após a conclusão da ramificação de hotfix, ela é mesclada para as ramificações de desenvolvimento (develop) e a principal (master).
Fluxo de trabalho do git Flow

Ótimo. Até aqui, entendi o fluxo, entendi as branches e suas funções.

E, acredito que o mais importante, consegui imaginar alguns cenários desse processo sendo executado e possibilitando continuar desenvolvendo a aplicação conforme a tarefa, mesmo que alguma estava parada devido a bugs ou validações.

No Youtube, no canal Código Fonte TV, criaram um vídeo interessante, falando sobre o gitflow no ambiente de desenvolvimento de aplicações. O vídeo é uma conversa sobre o workflow muito utilizado para o controle de versões, o Gitflow. Explicações de como “montar esse quebra-cabeças” com Master, Develop, Features, Releases, Hotfix, Git, Branches e mais alguns detalhes.

Também no canal Código Fonte TV, uma abordagem interessante sobre o que é o git e sobre ser tão importante para a área de desenvolvimento de softwares. Lembrando que eu quero desenhar meu gitflow para meus projetos no github, onde gitflow é um dos modelos de fluxo de trabalho com git.

Esse vídeo reforça a explicação do objetivo de usar Git no desenvolvimento das aplicações, mesmo quando realizada individualmente ou pequenas equipes.

O Rodrigo Branas traz alguns detalhes comparando outras ferramentas de versionamento além do Git. Detalha o ambiente que utiliza o Gitflow para gerir o processo de desenvolvimento com mais confiabilidade com o código que está em produção.

Outro canal que apresentou uma abordagem legal, foi o do Angelo Luz, também utilizou o site do Atlassian como referência. Neste vídeo, o Angelo apresenta alguns fluxos de trabalho para o git e mostra como funciona o gitflow — um padrão consolidado para trabalhar com branches. Ele utiliza a extensão do gitflow para realização do fluxo correto da ferramenta, o que a princípio, quero fazer manualmente, apenas com o que o git proporciona.

Um ponto a se destacar é o ciclo de vida das branches. A branch master e a branch develop são as que se mantém durante todo o fluxo de trabalho enquanto as demais branches se manterão enquanto estiverem agindo, pois depois de receberem os respectivos códigos, fazer o merge com as outras branches conforme suas funções, devem ser deletadas.

Git — um sistema de controle de versões distribuído

A extensão gitflow realiza esses processos e coloca o ponteiro já na branch para seguir o fluxo, enquanto realizar o fluxo de trabalho manualmente, deverá ser realizado pelo desenvolvedor. Então, muita atenção com o ciclo de vida de cada uma das branches, conforme sua função.

Outro artigo muito interessante que encontrei no medium, Utilizando o fluxo Git Flow, demonstra como criar as branches do fluxo de trabalho do git, o gitflow. Esse artigo do Medium tem 2.6 k aplausos, então me parece bem popular e esclarecedor. Vamos ver.

Esse artigo ficou menor que os demais, mas a intenção é tratar situações mais específicas nesse tipo de tema técnico e prático. Tomara que tenha gostado, aplauda o artigo! Até o próximo artigo e ótimos códigos.

--

--

Developer Frontend Web — Javascript | ReactJS https://linktr.ee/douglasabnovato

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store