Nossa equipe acabou de mudar de FogBugz & Kiln / Mercurial para Jira & Stash / Git. Estamos usando o modelo Git Flow para ramificação, adicionando ramificações de subtarefa fora das ramificações de recurso (relacionadas às subtarefas Jira dos recursos Jira). Estamos usando o Stash para atribuir um revisor quando criamos uma solicitação pull para mesclar novamente para a ramificação pai (geralmente desenvolvemos, mas para subtarefas de volta para a ramificação de recursos).
O problema que estamos descobrindo é que, mesmo com o melhor planejamento e detalhamento dos casos de recursos, quando vários desenvolvedores estão trabalhando juntos no mesmo recurso, digamos no front-end e no back-end, se estão trabalhando no código interdependente que é em filiais separadas, um desenvolvedor acaba bloqueando o outro.
Tentamos puxar entre os galhos um do outro à medida que desenvolvemos. Também tentamos criar ramificações de integração local que cada desenvolvedor pode obter de várias ramificações para testar a integração à medida que elas se desenvolvem. Finalmente, e isso parece funcionar possivelmente o melhor para nós até agora, embora com um pouco mais de sobrecarga, tentamos criar um ramo de integração fora do ramo de recursos logo de cara. Quando um ramo de subtarefa (fora do ramo de recurso) está pronto para uma solicitação de recebimento e revisão de código, também mesclamos manualmente esses conjuntos de alterações nesse ramo de integração de recursos. Todos os desenvolvedores interessados podem extrair desse ramo de integração para outros ramos de subtarefa dependentes. Isso impede que alguém espere por qualquer filial da qual eles dependam para passar na revisão de código.
Eu sei que isso não é necessariamente um problema do Git - tem a ver com o trabalho no código interdependente em várias ramificações, misturado com nosso próprio processo de trabalho e cultura. Se não tivéssemos a política estrita de revisão de código para o desenvolvimento (verdadeiro ramo de integração), o desenvolvedor 1 poderia se unir para desenvolver o desenvolvedor 2. Outra complicação é que também é necessário que você faça alguns testes preliminares como parte do processo de revisão de código antes de entregar o recurso ao controle de qualidade. Isso significa que, mesmo que o desenvolvedor de front-end 1 esteja saindo diretamente da ramificação do desenvolvedor de back-end 2, eles se o desenvolvedor de back-end 2 terminar e sua solicitação de recebimento estiver em revisão de código por uma semana, então o desenvolvedor de front-end 2 tecnicamente não poderá criar sua solicitação / revisão de código porque seu revisor de código não poderá teste porque o desenvolvedor de back-end 2 '
Resumindo, estamos nos encontrando em uma abordagem muito mais serial do que paralela nesse caso, dependendo de qual rota seguirmos, e gostaríamos de encontrar um processo a ser usado para evitar isso.
A última coisa que mencionarei é que percebemos compartilhando código entre filiais que não foram revisadas e finalizadas, mas ainda estamos usando o código beta de outras pessoas. Até certo ponto, acho que não podemos evitar isso e estamos dispostos a aceitar isso até certo ponto.