O GitHub Flow é implantado na produção antes da mesclagem com o master: um segundo recurso não substituirá o primeiro?


8

No entendimento do GitHub Flow, como visto aqui , um recurso, após a revisão do código, é implantado primeiro na produção e depois mesclado no master.

Se houver um segundo recurso ramificado a partir do mesmo commit que o primeiro recurso, e esse também for implementado diretamente na produção, a produção não conterá mais o primeiro recurso.

primeiro recurso mesclado no mestre

feito em learngitbranching.js.org

Depois que o c2 é implantado, como o c3 pode ser implantado antes da fusão com o c2 ou c4?

Como o GitHub Flow lida com esse problema?

Uma solução óbvia seria exigir que um recurso fosse refeito no mestre antes de ser implementado na produção. No entanto, isso é propenso a erros humanos. Se alguém se esquece de se recuperar, a produção está perdendo um recurso.

Eu apreciaria especialmente as respostas daqueles que têm experiência com o GitHub Flow. Como você não tem esse problema?

Respostas:


1

Boas notícias! O GitHub tem um artigo sobre isso!

Eles identificam três medidas de segurança:

  • Certifique-se de que passa nos testes. Esperemos que isso faça parte da maioria dos fluxos de trabalho de implantação. Mas, é uma das medidas de "segurança" que eles enfatizam.
  • "Bloqueie" o pipeline de implantação conforme necessário: Quando uma ramificação de recurso está sendo implantada ou verificada na produção, ninguém mais pode iniciar uma implantação.
  • Verifique se todas as ramificações implantadas contêm todos os conjuntos de alterações já implantados. Como isso é feito é um pouco mais complicado. Aqui está o que eles dizem:

Usamos a API do GitHub para verificar esse requisito. Um terminal no aplicativo github.com expõe o SHA1 atualmente em execução na produção. Nós enviamos isso à API de comparação do GitHub para obter a "base de mesclagem", ou o ancestral comum, do mestre e do SHA1 de produção. Em seguida, podemos comparar isso com a filial que estamos tentando implantar para verificar se a filial foi capturada. Ao usar o ancestral comum de mestre e produção, o código que existe apenas em uma ramificação pode ser removido da produção e as alterações que chegaram ao mestre, mas ainda não foram implantadas, ainda não exigirão que as ramificações sejam mescladas antes da implantação.

Se a ramificação estiver atrasada, o mestre será mesclado automaticamente. Fazemos isso usando a nova ✨Merging API✨ que estamos disponibilizando hoje. Essa mesclagem inicia uma nova compilação de IC, como qualquer outro evento de estilo push, que inicia uma implantação quando passa.

A API de mesclagem basicamente executa uma mesclagem padrão - mas o faz no lado do servidor.

Sua solução provavelmente não precisa ser tão sofisticada. No final do dia, você só precisa de uma garantia razoável de que:

  • Os testes passam
  • Somente uma pessoa implanta por vez
  • O mestre é mesclado nas ramificações de recursos antes da implantação

Minha equipe decidiu fundir para dominar antes de implantar na produção. Nenhuma ramificação é mesclada no mestre, a menos que seja baseada no mestre. Após a mesclagem, todas as outras ramificações não mescladas (recursos ainda em andamento) devem ser restauradas para o mestre antes de serem elegíveis para revisão de código, teste (manual e com script) e eventual fusão no mestre. Quando um recurso está no mestre, é como se estivesse no prod, porque o mestre pode ser implantado a qualquer momento.
DarkSigma

Parece uma péssima idéia implantar um aplicativo no Production que não tenha sido mesclado com a ramificação principal. Você pensaria que, se estiver movendo para Produção, você já testou a mudança em um ambiente de teste. Se ele falhar no Prod, basta reverter para a versão anterior. Tenho certeza que o Github tem suas razões, mas parece muito trabalho extra e pode levar a uma situação em que você não tem idéia do que realmente está em produção. Fusões ao mestre nem sempre vão bem se houver conflitos, para que pudesse ter o código em Prod que não corresponde ao que você pretende ...
Erik Pearson

@ErikPearson Acho que a idéia é que você precisa pelo menos ter o mestre mesclado primeiro no ramo do recurso. Seu sistema de compilação não deve permitir a implantação de uma ramificação não imergível. ... Especular, é claro. Na verdade, não uso esse fluxo de trabalho. Mas, não me parece horrível com as ferramentas certas .
svidgen

0

Esse problema já aconteceu com você ou é uma questão teórica?

O Git é "inteligente o suficiente" ao mesclar apenas o código alterado por push, se houver "problemas", isso causará um conflito de mesclagem.

Cada novo recurso é baseado na ramificação de desenvolvimento, e não os baseamos em outros recursos.

Uma coisa que fazemos para minimizar os conflitos de mesclagem é mesclar com frequência e, antes de iniciar um recurso, puxe sempre o desenvolvimento mais recente. (nunca nos comprometemos a dominar, mas sempre a um ramo de desenvolvimento, que será mesclado de vez em quando ao ramo mestre)


2
Você não entendeu minha pergunta. Não se trata de conflitos de mesclagem e não há ramo de desenvolvimento. Eu pergunto sobre o fluxo do Git Hub (veja o link). Minha equipe deseja usar esse fluxo de trabalho, mas não entende por que implantaríamos um recurso não imerso. No entanto, isso parece ser uma inovação deste fluxo
DarkSigma

Sempre há um ramo de desenvolvimento. Parece que você está chamando seu ramo de desenvolvimento de "mestre".
Gnasher729 7/17
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.