The Codest
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Indústrias
    • Fintech e Banca
    • E-commerce
    • Adtech
    • Tecnologia da saúde
    • Fabrico
    • Logística
    • Automóvel
    • IOT
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
Seta para trás VOLTAR
2019-08-13
Desenvolvimento de software

GitFlow

Daniel Grek

Este documento foi escrito com o objetivo de unificar as regras de Git Flow internas da empresa. Este método não está a introduzir o Git Flow puro, pois é uma mistura do Git Flow e do GitLab Flow, com as melhores práticas da empresa trabalhadas ao longo de muitos anos. Ajuda a manter um histórico limpo e legível do repositório e um melhor controlo das alterações e dos ciclos de vida dos projectos.

Este documento foi escrito com o objetivo de unificar as regras internas do GitFlow da empresa. Este método não está a introduzir o GitFlow puro, pois é uma mistura do GitFlow e do GitLab Flow, com as melhores práticas da empresa trabalhadas ao longo de muitos anos. Ajuda a manter um histórico limpo e legível do repositório e um melhor controlo sobre as alterações e projeto ciclos de vida.

Inicialização do repositório

Depois de inicializar o repositório, crie um desenvolver e mestre se ele não foi incluído por padrão. O ramo develop deve conter uma versão de desenvolvimento código que é um espelho do ramo master com novas funcionalidades incluídas. O master contém uma versão estável do código, representando o estado de produção. Ambos têm vida útil infinita e, em comparação com outros ramos no Git Flow, nunca serão removidos. Configure regras de proteção adequadas: exigir revisões de pull request antes de fazer o merge e exigir que as verificações de estado sejam aprovadas antes da fusão. Pode também considerar a hipótese de permitir apenas equipa membros para fundir as alterações com o master.

GitFlow
$ git init
$ git commit --allow-empty -m "Compromisso inicial"
$ git checkout -b develop master

NOTA: Por vezes, é importante para o projeto adicionar mais ramos infinitos, por exemplo, para representar os ambientes disponíveis. No entanto, se possível, mantenha a "regra dos dois".

Ramos de caraterísticas

Quando começar a trabalhar com uma determinada funcionalidade, certifique-se primeiro de que tem o seu desenvolver ramo sincronizado.

 $ git checkout develop && git pull --rebase

Em seguida, faça o checkout para o seu ramo de caraterísticas. Dê-lhe um nome de acordo com o esquema fornecido: caraterística-JIRA-TASK-ID ou também pode quebrar essa regra e dar-lhe um nome diferente. Neste caso, certifique-se de que não entra em conflito com os padrões reservados para o lançamento, hotfix, bugfix, desenvolvimento ou o ramo principal. Manter os IDs das tarefas do JIRA irá ajudá-lo a gerir os seus ramos de funcionalidades de forma mais eficaz.

$ git checkout -b feature-JIRA-TASK-ID develop

Este ramo deve existir enquanto o recurso em questão for desenvolvido e depois fundido com o ramo principal. Para fazer commit no seu ramo local, por favor siga este comando:

 $ git add .
 $ git commit -m "JIRA-TASK-ID: Descrição da tarefa"

É recomendado que adicione mais commits ao seu branch local, seguindo a regra "Commit early and often". No entanto, no final, eles devem ser esmagados num único commit que representa uma tarefa JIRA. Fazer commits com frequência ajuda-o a gerir o seu histórico de desenvolvimento. Quando a funcionalidade está pronta, é altura de abrir um Pull Request para desenvolver um branch. Primeiro, pode fazer push do seu branch local se este não tiver sido empurrado para muito longe:

 $ git push origin feature-JIRA-TASK-ID

Quando o ramo estiver pronto, abra o seu pedido de extração no GitHub, seguindo este artigo: https://help.github.com/en/articles/creating-a-pull-request

Antes de abrir um pull request, certifique-se do seguinte:

  • a descrição correta foi dado - normalmente, seria ligar a sua tarefa JIRAmas também pode incluir algumas informações úteis relacionadas com o código atual
  • CírculoCI as etapas foram concluídas com êxito
  • seu foram atribuídos membros da equipa - é uma boa prática incluir todos os membros da sua equipa como cessionários
  • a os revisores foram selecionados - o número de revisores depende da sua equipa
  • o seu código está efetivamente pronto para revisão - dê uma última vista de olhos ao seu código, pense novamente se ainda há algo para refactorizar, teste-o localmente e garantir que está pronto para as etapas seguintes.
  • existem não há conflitos de fusão e um ramo está atualizado com o desenvolvimento - se houver algum, resolvê-lo primeiro
$ git checkout develop && git pull --rebase
$ git checkout feature-JIRA-TASK-ID && git rebase develop # use -i flag for squash
$ git push -f origin feature-JIRA-TASK-ID # Utilize isto com cuidado, pois a flag -f substitui o repositório remoto
  • manter apenas os commits importantes - cada confirmação deve ser representada por uma tarefa JIRA, por exemplo, JIRA-TASK-ID: Configuração de novas funcionalidades; outros devem ser esmagado durante o rebaseamento o seu ramo com o ramo de desenvolvimento
  • tem o ramo de destino adequado selecionado
  • não se esquece de alterar o estado da sua tarefa JIRA

Fusão do ramo de recursos

É altura de fundir as suas alterações no ramo de desenvolvimento quando:

  • o pull request foi aprovado por membros selecionados da equipa
  • todos os testes foram concluídos com êxito
  • não há conflitos de mesclagem e o histórico de commits parece bom

Isto pode ser feito pelo gestor de projeto ou pelo programador de funcionalidades. Para efetuar a fusão, siga estes passos:

 $ git checkout develop
 $ git merge feature-JIRA-TASK-ID
 $ git push origin develop
 $ git branch -d feature-JIRA-TASK-ID
 $ git push origin :feature-JIRA-TASK-ID

Agora, o estado da tarefa JIRA pode ser alterado.

Lançamentos

As ramificações de release devem ser criadas por uma pessoa responsável pela release atual. Normalmente, as releases são criadas periodicamente, por exemplo, de acordo com a correr ciclo de vida.

Controlo de versões semântico

Dar a um ramo de lançamento um nome apropriado e uma etiqueta correspondente não é uma tarefa fácil logo no início. É uma boa prática começar a usar o versionamento semântico (https://semver.org/) que permite um melhor controlo e torna a leitura do histórico do git mais fácil. A string da versão é construída de acordo com o esquema MAJOR.MINOR.PATCH:

  • MAJOR - alteração que representa alterações incompatíveis da API
  • MENOR - adicionar novas funcionalidades de forma compatível com as versões anteriores
  • PATCH - adição de correcções de erros compatíveis com as versões anteriores

Também pode utilizar sufixos especiais, como os que representam ramos beta ou legacy, ou criar pré-lançamentos. Nesse caso, dê-lhe o nome correto, por exemplo, 1.1.0-beta.4, 1.1.0-beta.5 ou 1.1.0-alpha.

Fazer um lançamento

O ramo de lançamento deve ser um filho do ramo de desenvolvimento e pode conter apenas os commits relacionados com correcções de erros.

O nome do ramo deve ser baseado na versão de lançamento, com o prefixo release-: lançamento-MAJOR.MINOR.PATCH. O ramo de lançamento deve ser totalmente testado, tanto automática como manualmente no ambiente de teste. Se ocorrerem erros, esta é a última oportunidade para enviar as correcções adequadas e voltar a executar todo o processo, desde que não seja verificado positivamente e esteja pronto para processamento posterior. Então, o commit de lançamento deve ser enviado, com alterações da string da versão de lançamento atual em arquivos, como package.json. Ele também deve ter um impacto no arquivo CHANGELOG.md. Isso ajudará a rastrear todas as alterações antes de um lançamento adequado e preparar o conteúdo para o lançamento do GitHub quando o processo de mesclagem for concluído. A atualização do ficheiro único deve consistir em todas as alterações de lançamento agrupadas em três categorias: funcionalidades, correcções e manutenção.

No entanto, no primeiro passo, certifique-se de que tem os ramos develop e master actualizados.

 $ git checkout master && git pull --rebase
 $ git checkout develop && git pull --rebase
 $ git merge master
 $ git checkout -b release-M.M.P
 $ git add .
 $ git commit -m "Produto Nome da versão M.M.P"
 $ git push origin release-M.M.P

Neste ponto, pode-se decidir criar outro pull request para o master com o branch de lançamento. Pode ser uma boa ideia executar uma verificação adicional se todos os testes passarem bem na máquina remota.

 $ git checkout master
 $ git merge release-M.M.P
 $ git tag -a M.M.P # a mensagem de adição pode ser definida através do sinalizador -m
 $ git push origin M.M.P
 $ git push origin master
 $ git branch -d release-M.M.P
 $ git push origin :release-M.M.P

Em seguida, aceda à página de lançamentos do GitHub e prima o botão "Draft new release". No formulário apresentado, selecione a etiqueta da versão atual, defina o título da versão semelhante ao commit da versão (Product Name M.M.P release) e uma descrição adequada, com base no ficheiro CHANGELOG.md. Para projectos públicos, a descrição deve conter uma lista de todos os PR incluídos na versão atual.

No caso de algumas correcções de erros terem sido aplicadas no ramo de lançamento, certifique-se de que tem o ramo de desenvolvimento atualizado:

$ git checkout develop && git merge master
$ git push origin develo

Correcções e correcções de erros

A principal diferença entre um bug e as hot fixes são os seus ramos de destino.

Correção de erros

As correcções de erros devem ser aplicadas nos ramos de lançamento como a única forma de atualizar o código antes de o fundir com o master. Primeiro, crie o branch a partir do branch de funcionalidades atual. Certifique-se de que o tem atualizado localmente.

 $ git checkout release-M.M.P && git pull --rebase
 $ git checkout -b bugfix-M.M.P

Em seguida, faça o commit das alterações necessárias. Após a conclusão do processo, crie um pull request e direcione-o para o branch de lançamento. Siga as orientações da secção do ramo de recursos. O título final do commit deve corresponder ao esquema fornecido: "Bugfix M.M.P: Correção da essência do problema". Quando o pull request for aprovado, é altura de o fundir com a versão atual.

 $ git checkout release-M.M.P
 $ git merge bugfix-M.M.P
 $ git push origin release-M.M.P

Correção

Para efetuar uma correção no ramo principal, devem ser seguidos passos muito semelhantes aos de uma correção de erros, tendo em conta que o ramo de destino é agora o ramo principal.

 $ git checkout master && git pull --rebase
 $ git checkout -b hotfix-X.Y.(Z+1) # M.M.P representa a versão atual

De seguida, siga os passos de desenvolvimento habituais e, quando o processo estiver concluído, crie um pedido pull com o ramo principal como destino. Tenha em mente que o commit final deve corresponder ao esquema dado "Hotfix X.Y.(Z + 1): Correção da essência do problema". Quando todos os pontos de controlo tiverem sido aprovados com êxito, execute uma fusão com o ramo principal. Estes passos diferem dos apresentados para uma correção de erro, uma vez que precisamos de fazer o bump da versão de lançamento atual.

 $ git checkout master && git pull --rebase
 $ git merge hotfix-X.Y.(Z+1)
 $ git tag -a X.Y.(Z+1) # a mensagem de adição pode ser definida através do sinalizador -m
 $ git push origem X.Y.(Z+1)
 $ git push origem master
 $ git branch -d hotfix-X.Y.(Z+1)
 $ git push origem :hotfix-X.Y.(Z+1)
 $ git checkout develop && git merge master
 $ git push origem desenvolvimento

Folha de dicas

Repositório de inicialização

 $ git init
 $ git commit --allow-empty -m "Compromisso inicial"
 $ git checkout -b develop master
 $ git push origin develop
 $ git push origin master

Caraterísticas

$ git checkout develop && git pull --rebase
$ git checkout -b feature-JIRA-TASK-ID develop

Iniciar o desenvolvimento e as confirmações

$ git add .
$ git commit -m "IRA-TASK-ID: Descrição da tarefa" #initial commit
$ git push origin feature-JIRA-TASK-ID

Abrir pull request

Rebase e preparação para pull request

$ git checkout develop && git pull --rebase
$ git checkout feature-JIRA-TASK-ID && git rebase develop # use a flag -i para squash
$ git push -f origin feature-JIRA-TASK-ID # Use isso com cuidado, pois o sinalizador -f sobrescreve o repositório remoto

Fundir alterações e eliminar o ramo

$ git checkout develop # o ramo deve ser sincronizado com o ramo develop nesta fase
$ git merge feature-JIRA-TASK-ID
$ git push origin develop
$ git branch -d feature-JIRA-TASK-ID
$ git push origin :feature-JIRA-TASK-ID

Lançamentos

$ git checkout master && git pull --rebase
$ git checkout develop && git pull --rebase
$ git merge master
$ git checkout -b release-M.M.P

Criar commit de liberação

$ git add .
$ git commit -m "Nome do produto M.M.P release" #initial commit
$ git push origin release-M.M.P

Abrir pull request

Fundir alterações, lançar e eliminar o ramo

$ git checkout master # o ramo deve ser sincronizado com o ramo master nesta fase
$ git merge release-M.M.P
$ git tag -a M.M.P # a mensagem de adição pode ser definida através do sinalizador -m
$ git push origin M.M.P
$ git push origin master
$ git branch -d release-M.M.P
$ git push origin :release-M.M.P

Correção de erros

$ git checkout release-M.M.P && git pull --rebase
$ git checkout -b bugfix-M.M.P

$ Commit fixes
$ git add .
$ git commit -m "Bugfix M.M.P: Correção da essência do problema" # Compromisso inicial
$ git push origin bugfix-M.M.P

Abrir pull request

Fundir alterações e eliminar o ramo

$ git checkout release-M.M.P # O ramo deve ser sincronizado com o ramo de lançamento atual nesta fase
$ git merge bugfix-M.M.P
$ git push origin release-M.M.P
$ git branch -d bugfix-M.M.P
$ git push origin :bugfix-M.M.P

Correção

$ git checkout master && git pull --rebase
$ git checkout -b hotfix-X.Y.(Z+1) # M.M.P representa a versão atual

$ Commit fixes
$ git add .
$ git commit -m "Hotfix M.M.P: Correção da essência do problema" # Compromisso inicial
$ git push origin bugfix-M.M.P

Abrir pull request

Mesclar alterações, lançar e excluir ramificações

$ git checkout master # nesta fase, o ramo deve ser sincronizado com o master atual
$ git merge hotfix-X.Y.(Z+1)
$ git tag -a X.Y.(Z+1) # a mensagem de adição pode ser definida através do sinalizador -m
$ git push origem X.Y.(Z+1)
$ git push origem master
$ git branch -d hotfix-X.Y.(Z+1)
$ git push origem :hotfix-X.Y.(Z+1)
$ git checkout develop && git merge master
$ git push origem desenvolvimento

Ler mais:

  • As boas práticas da Codest para a construção de software: CircleCI
  • Como criar extensões do Google Chrome utilizando o estilizador de legendas da Netflix?
  • React: a estrutura JavaScript mais popular

Artigos relacionados

Ilustração de uma aplicação de cuidados de saúde para smartphone com um ícone de coração e um gráfico de saúde em ascensão, com o logótipo The Codest, representando soluções digitais de saúde e HealthTech.
Desenvolvimento de software

Softwares para o setor de saúde: Tipos, casos de uso

As ferramentas em que as organizações de cuidados de saúde confiam atualmente não se assemelham em nada às fichas de papel de há décadas atrás. O software de cuidados de saúde apoia agora os sistemas de saúde, os cuidados aos doentes e a prestação de cuidados de saúde modernos em...

OCODEST
Ilustração abstrata de um gráfico de barras em declínio com uma seta ascendente e uma moeda de ouro que simboliza a eficiência ou a poupança de custos. O logótipo The Codest aparece no canto superior esquerdo com o slogan "In Code We Trust" sobre um fundo cinzento claro
Desenvolvimento de software

Como dimensionar a sua equipa de desenvolvimento sem perder a qualidade do produto

Aumentar a sua equipa de desenvolvimento? Saiba como crescer sem sacrificar a qualidade do produto. Este guia cobre sinais de que é hora de escalar, estrutura da equipe, contratação, liderança e ferramentas - além de como o The Codest pode...

OCODEST
Desenvolvimento de software

Construir aplicações Web preparadas para o futuro: ideias da equipa de especialistas do The Codest

Descubra como o The Codest se destaca na criação de aplicações web escaláveis e interactivas com tecnologias de ponta, proporcionando experiências de utilizador perfeitas em todas as plataformas. Saiba como a nossa experiência impulsiona a transformação digital e o negócio...

OCODEST
Desenvolvimento de software

As 10 principais empresas de desenvolvimento de software sediadas na Letónia

Saiba mais sobre as principais empresas de desenvolvimento de software da Letónia e as suas soluções inovadoras no nosso último artigo. Descubra como estes líderes tecnológicos podem ajudar a elevar o seu negócio.

thecodest
Soluções para empresas e escalas

Fundamentos do desenvolvimento de software Java: Um Guia para Terceirizar com Sucesso

Explore este guia essencial sobre o desenvolvimento de software Java outsourcing com sucesso para aumentar a eficiência, aceder a conhecimentos especializados e impulsionar o sucesso do projeto com The Codest.

thecodest

Subscreva a nossa base de conhecimentos e mantenha-se atualizado sobre os conhecimentos do sector das TI.

    Sobre nós

    The Codest - Empresa internacional de desenvolvimento de software com centros tecnológicos na Polónia.

    Reino Unido - Sede

    • Office 303B, 182-184 High Street North E6 2JA
      Londres, Inglaterra

    Polónia - Pólos tecnológicos locais

    • Parque de escritórios Fabryczna, Aleja
      Pokoju 18, 31-564 Cracóvia
    • Embaixada do Cérebro, Konstruktorska
      11, 02-673 Varsóvia, Polónia

      The Codest

    • Início
    • Sobre nós
    • Serviços
    • Case Studies
    • Saber como
    • Carreiras
    • Dicionário

      Serviços

    • Aconselhamento
    • Desenvolvimento de software
    • Desenvolvimento backend
    • Desenvolvimento de front-end
    • Staff Augmentation
    • Programadores de back-end
    • Engenheiros de nuvem
    • Engenheiros de dados
    • Outros
    • Engenheiros de GQ

      Recursos

    • Factos e mitos sobre a cooperação com um parceiro externo de desenvolvimento de software
    • Dos EUA para a Europa: Porque é que as empresas americanas decidem mudar-se para a Europa?
    • Comparação dos centros de desenvolvimento da Tech Offshore: Tech Offshore Europa (Polónia), ASEAN (Filipinas), Eurásia (Turquia)
    • Quais são os principais desafios dos CTOs e dos CIOs?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Direitos de autor © 2026 por The Codest. Todos os direitos reservados.

    pt_PTPortuguese
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese es_ESSpanish nl_NLDutch etEstonian elGreek cs_CZCzech pt_PTPortuguese