Uma estratégia de fusão como o Git Flow é realmente um antipadrão?

30

Minha empresa está usando o Git e está usando um esquema de ramificação peculiar - o trabalho é feito no master e as ramificações são reservadas para lançamentos. Isso funciona bem, desde que todo o trabalho realizado em uma iteração chegue à ramificação, mas se surgir um problema crítico de produção, precisamos garantir que o trabalho de alguma forma chegue às duas ramificações.

Ultimamente, estamos nos divertindo um pouco com esses galhos. Tem sido uma dor de cabeça administrativa, garantindo que todo o trabalho chegue a todos os ramos, e alguns bugs que foram corrigidos em um ramo não o tornem mestre até que alguém o indique, o que é preocupante.

Eu me deparei com o Git Flow há um tempo e sinto que seria uma solução para o nosso problema - o código não percolava todo o caminho até o lançamento ou todo o caminho de volta. O único problema é que minha liderança afirmou que esse tipo de desenvolvimento era um antipadrão - desenvolvendo-se furiosamente por duas semanas e depois gastando três para resolver os conflitos de mesclagem.

Não tenho certeza absoluta de que concordo e, desde que o trouxe à tona, o trabalho foi retomado normalmente. Somente recentemente tivemos alguns pontos problemáticos com isso.

Eu gostaria de saber - por que esse tipo de esquema de desenvolvimento seria visto como um antipadrão? É realmente um anti-padrão?

Makoto
fonte
11
A seção "Regra 3" do antigo post de blog de Ted Dziuba pode ajudar a ilustrar como pode ser um antipadrão .
Isxek
5
Na IMO, quanto mais tempo você gasta pensando no controle de versão, mais isso dá errado com todo o usuário -> fenômeno da ferramenta em primeiro lugar.
Erik Reppen
@ErikReppen: Gostaria de afastar a mente de todos do controle de versão e ter um processo com o qual todos possam se acostumar. Dessa forma, não precisamos nos preocupar com coisas como se isso é um anti-padrão ou não.
Makoto
6
@ Makoto Qualquer coisa que viole o KISS é um IMO antipadrão. É aqui que os usuários avançados do VCS tendem a me deixar louco.
Erik Reppen
6
O termo "antipadrão" é como "melhor prática", na medida em que costuma servir de desculpa para que as pessoas desliguem o cérebro. Não aceite essa noção se o líder não puder lhe dizer claramente que experiência ele tem com ela e por que é ruim.
21713 Kyralessa

Respostas:

30

Ele está principalmente se referindo ao lado dos ramos do recurso do modelo. As ramificações de recursos foram declaradas antipadrão há muito tempo, quando duravam meses e os sistemas de controle de versão não podiam ser mesclados para salvar sua vida. Ramos especiais que duram uma semana ou duas têm muito menos problemas, especialmente se você está fundindo continuamente a partir develop para o ramo de funcionalidade durante esse tempo. Qualquer coisa por muito mais tempo ainda não é recomendada.

Mesmo se você não usar o lado de ramificação do recurso git flow, as outras partes serão úteis para garantir que você obtenha mesclagens limpas e que suas alterações sejam propagadas na direção certa.

Karl Bielefeldt
fonte
3
Minha experiência com as ramificações de recursos, ou da maneira como as fizemos, é que pode haver uma mágoa com elas se elas puderem viver mais do que uma iteração. Uma regra que afirma que todos os recursos devem ser mesclados na iteração antes do lançamento seria bom, para aliviar o sofrimento de fusões - e boy, já tivemos alguns mágoa séria por trás daqueles ...
Makoto
6
Minha experiência é que você pode ter coisas locais por muito tempo, desde que você as mantenha mescladas com o mestre recente e / ou desenvolva conforme apropriado.
Jan Hudec
2
@JaHudec ... ou até você ter duas coisas por aí que são conflitantes de alguma forma. Você deve sempre ter a visão geral sobre o que está sendo feito ...
Johannes
5
Ao ler um pouco sobre isso, a referência de Martin Fowler parece indicar que as ramificações de recursos feitas em um fluxo de integração contínuo podem funcionar - se forem feitas em pequenos pedaços do que o que a maioria das pessoas consideraria fazer. Então, de certa forma, você está certo - menos de duas semanas, pois um tempo de vida em um ramo de recursos parece adequado. Não vejo, no entanto, como os próprios ramos de recurso são o antipadrão.
Makoto
3
Você está certo. Eles são apenas um anti-padrão quando vivem muito tempo sem serem mesclados. Às vezes, as pessoas ainda criticam uma idéia quando não se lembram das razões subjacentes.
Karl Bielefeldt
21

A fusão é uma coisa engraçada - quanto menos frequentemente for feito, mais difícil será, mais difícil será, mais as pessoas terão medo, menos frequentemente o farão.

A solução é não permitir desvios demais dos desvios ou não usar desvios.

Se as pessoas entenderem isso, você provavelmente não terá muitos problemas com a mesclagem, se não - talvez os ramos não sejam uma boa ideia sem alguma educação.

maxim1000
fonte
11
Não, não usar galhos não é um iniciador. A outra questão principal seria que o trabalho pode ser feito em dois lugares diferentes no mesmo código, por isso espero que possamos fazer algo para aliviá-lo também.
Makoto
12
@makoto, muitas vezes, desacoplar as coisas no código torna os conflitos menos frequentes. Pode ser uma separação simples de uma funcionalidade em funções / classes ou mais alto nível, evitando suposições não documentadas entre os módulos. Então as mudanças se tornam mais localizadas.
maxim1000
11
@ maxim1000 Eu concordo. Eu acho que alguém uma vez disse algo como "A VCS é alternativa de um homem pobre à arquitetura modular [dissociado]"
8DH
+1 no primeiro parágrafo. E sim, sem educação gitflow-like é um beco sem saída
daitangio