Git: merges automáticos com hooks do lado do servidor (para sucesso total!)

Nicola Paolucci
Nicola Paolucci
Voltar para a lista

Os fluxos de trabalho de DVCS (sistema de controle de versão distribuído) empresariais estão se estabelecendo e os padrões se consolidando. A flexibilidade que o Git oferece às equipes é tão ampla que, mesmo dentro de uma única empresa, equipes diferentes podem usar abordagens diversas para compartilhamento e colaboração de código.

Eu falo com base em evidências concretas, pois é o que acontece na Atlassian. A equipe do Bitbucket Server não trabalha como a equipe do Confluence que por sua vez não trabalha como a equipe do Jira. O processo ágil delas é semelhante, mas elas têm abordagens diferentes de ramificação, integração contínua e organização de equipes.

Diferenças que não resistem, padrões comuns estão surgindo. Um paradigma recorrente na indústria é o uso de repositório centralizado com ramificação principal, várias linhas estáveis de desenvolvimento e seguir um fluxo de trabalho de ramificação de recursos onde novos recursos e correções de bug podem ser desenvolvidos de maneira independente. Essa situação oferece integração rápida e permite que as equipes aproveitem o aumento de eficiência que vem com o DVCS.

Modelo de ramificação completa

Se você ler e refletir sobre o que falei, pode perguntar: se a empresa está seguindo o fluxo de trabalho com repositório centralizado mencionado acima, por que precisaria de bifurcações?

Existem vários motivos pelos quais a bifurcação é útil e vital até mesmo dentro da empresa. Antes de falar sobre eles, quero primeiro voltar um pouco e oferecer alguns contextos e definições.

Sumário

  1. O que é bifurcação?
  2. As bifurcações foram premiadas como o melhor fluxo de trabalho de código aberto
  3. Você precisa de bifurcações na empresa?
  4. Proteja os componentes essenciais, mas incentive a inovação e a adoção
  5. Viabilize a colaboração entre departamentos
  6. Reduza a desorganização
  7. Simplifique a interação com os prestadores de serviço
  8. Interações de desenvolvedor para desenvolvedor dentro da empresa
  9. Conclusões

O que é bifurcação?

Na terminologia recente do DVCS, a bifurcação é a cópia remota do lado do servidor de algum repositório, diferente do original. Clones não são bifurcações; os clones são cópias locais de algum repositório remoto. Esse conceito é algo diferente da definição geral de bifurcações no desenvolvimento de software, mas é o significado que vou usar no decorrer deste artigo.

As bifurcações foram premiadas como o melhor fluxo de trabalho de código aberto

Se você não está atualizado sobre as tendências mais recentes, vou revelar um fato indiscutível: as bifurcações foram premiadas como o melhor processo de código aberto. Elas incentivam a participação reduzindo bastante a barreira de entrada e o atrito da colaboração de código.

Qualquer pessoa pode bifurcar o projeto aberto e o autor original não sofre penalidades ou cobranças por causa dessa ação: a operação é transparente. É provável que a pessoa receba feedback ou sugestões de melhoria por meio de pull requests, nada mais.

Você precisa de bifurcações na empresa?

A abordagem descentralizada e distribuída por completo é eficaz para equipes de código aberto pouco conectadas, mas a situação é a mesma para as equipes corporativas que trabalham no mesmo escritório com um repositório central? As bifurcações são úteis nesse caso?

As bifurcações são muito úteis também atrás dos firewalls da empresa.

Em termos abstratos, as bifurcações podem ser usadas dentro da empresa para gerenciar a confiança, acompanhar a maturidade das bases de código e facilitar a colaboração entre equipes.

Alguns exemplos concretos:

  • Proteja os componentes essenciais, mas incentive a inovação e a adoção.
  • Viabilize a colaboração entre departamentos.
  • Reduza a desorganização.
  • Simplifique a interação com os prestadores de serviço.
  • Interações de desenvolvedor para desenvolvedor atrás do firewall.

A gente vai analisar um por um.

Proteja os componentes essenciais, mas incentive a inovação e a adoção

Muitas empresas têm componentes essenciais que são reutilizados em toda a empresa. Muitas vezes, essas peças têm políticas mais rígidas sobre quem pode fazer alterações, garantias de estabilidade e processos de revisão mais complicados.

As bifurcações permitem manter o código sancionado bem protegido e, ao mesmo tempo, incentivam a adoção e a inovação.

A equipe não sancionada ou o desenvolvedor que trabalha sozinho com interesse no assunto pode bifurcar o projeto e começar a contribuir sem a necessidade de supervisão e sem atrapalhar o trabalho da equipe principal. A colaboração ainda acontece como de costume, com pull requests e ramificações de recursos.

Ao manter os experimentos fora dos repositórios principais, é possível gerenciar e acompanhar a maturidade das contribuições com eficácia. Hacks instáveis e não confiáveis permanecem guardados nas próprias bifurcações; criações sólidas permitem o merge nos componentes essenciais após revisão. Por que as bifurcações dão essa possibilidade e os clones normais não? Porque as bifurcações possibilitam o rastreamento: qualquer pessoa pode clonar no local e trabalhar nos próprios experimentos, mas o envio desse código a alguma bifurcação do lado do servidor possibilita que o código seja rastreável.

A Atlassian compartilha diversas bibliotecas essenciais com vários grupos, como, por exemplo, a Interface do usuário da Atlassian. As bifurcações aliviam a sobrecarga das equipes principais que os mantêm. Ramificações diferentes de recursos e árvores bagunçadas não são mais exibidas no repositório principal.

Viabilize a colaboração entre departamentos

Outro cenário, ainda que semelhante, também é comum: quando não há equipe "principal" ou algum responsável sobre determinado componente de software, mas vários departamentos mantêm as próprias versões modificadas da mesma infraestrutura. As bifurcações permitem que as equipes tenham controle e garantias sobre as próprias variações. A colaboração entre departamentos fica fácil e transparente com os pull requests e os incríveis recursos de integração do Git.

Reduza a desorganização

Quando as equipes crescem muito, a desordem das ramificações de recursos e da atualização de segurança pode tão grande ao ponto de impossibilitar a exibição correta das interfaces do usuário. O histórico do projeto fica tão confuso que é difícil entender o que está acontecendo e qual é o código de origem e o destino do merge dado. As ferramentas acabam perdendo eficácia nessa situação.

Para reiterar, as bifurcações permitem que as subequipes colaborem com abertura, mas mantêm os repositórios centrais em que as integrações acontecem tão organizados quanto possível.

Simplifique a interação com os prestadores de serviço

Outra área em que as bifurcações são importantes é na interação com terceiros, prestadores de serviço e freelancers. Ao disponibilizar as bifurcações como o único ponto de acesso dos prestadores de serviço aos repositórios, é possível alcançar vários benefícios:

  • Manter o repositório principal organizado e restrito.
  • Integrar o trabalho de terceiros após a revisão em horários agendados.
  • Manter o processo comum de colaboração do Git.

Interações de desenvolvedor para desenvolvedor atrás do firewall

A gente não pode deixar de fora essa peça final e muito importante do quebra-cabeça.

As bifurcações pessoais do desenvolvedor! O desenvolvedor pode achar divertido hackear, melhorar e aprimorar alguma parte da infraestrutura principal, mas talvez ele não queira compartilhar ainda seu trabalho inicial com outras pessoas. Você gostaria que ele deixasse algum código proprietário essencial aberto e disponível para qualquer pessoa?

Em outros casos, ele pode optar por seguir uma abordagem diferente para o problema em mãos e não disponibilizar a contribuição até que possa provar que determinada decisão de design vai trazer benefícios para a equipe. Para essa situação, as bifurcações pessoais são excelentes.

Elas também viabilizam o tipo de interação distribuída e descoordenada que tornou o DVCS tão bem-sucedido em comunidades de código aberto.

Conclusões

As bifurcações não são a resposta para todos os problemas de colaboração de código, mas a solução que elas oferecem é eficaz para várias situações problemáticas. Neste artigo, apresentei algumas ideias que apoiam a afirmação de que, dentro da empresa, as bifurcações ajudam a gerenciar a confiança, a maturidade das bases de código e facilitam a colaboração entre equipes.

Para concluir, quero avisar que a nova versão do Bitbucket Server inclui suporte de alto nível para bifurcações, além de muitos outros recursos.

Como de costume, envie uma mensagem para @durdn ou para a equipe incrível @AtlDevtools para mais informações sobre identificação de tendências do DVCS e sobre Git.

(Créditos: a imagem do modelo de ramificação foi bifurcada a princípio da fonte do Keynote do git-flow no nvie)

Pronto(a) para aprender Git?

Tente este tutorial interativo.

Comece agora mesmo