Nuestro equipo acaba de pasar de FogBugz & Kiln / Mercurial a Jira & Stash / Git. Estamos utilizando el modelo Git Flow para ramificar, agregando ramas de subtareas fuera de las ramas de características (relacionadas con las subtareas de Jira de características de Jira). Estamos usando Stash para asignar un revisor cuando creamos una solicitud de extracción para fusionar nuevamente en la rama principal (generalmente se desarrolla pero para las subtareas nuevamente en la rama característica).
El problema que estamos encontrando es que, incluso con la mejor planificación y desglose de casos de características, cuando varios desarrolladores trabajan juntos en la misma característica, digamos en el front-end y el back-end, si están trabajando en un código interdependiente que sea en ramas separadas, un desarrollador termina bloqueando al otro.
Hemos intentado tirar de las ramas de los demás a medida que nos desarrollamos. También hemos intentado crear ramas de integración local que cada desarrollador puede extraer de varias ramas para probar la integración a medida que se desarrollan. Finalmente, y esto parece funcionar posiblemente lo mejor para nosotros hasta ahora, aunque con un poco más de sobrecarga, hemos intentado crear una rama de integración fuera de la rama de características desde el principio. Cuando una rama de subtareas (fuera de la rama de características) está lista para una solicitud de extracción y revisión de código, también combinamos manualmente esos conjuntos de cambios en esta rama de integración de características. Entonces, todos los desarrolladores interesados pueden pasar de esa rama de integración a otras ramas de subtareas dependientes. Esto evita que alguien espere a que una sucursal de la que dependen para pasar la revisión del código.
Sé que esto no es necesariamente un problema de Git: tiene que ver con trabajar en código interdependiente en varias ramas, mezclado con nuestro propio proceso de trabajo y cultura. Si no tuviéramos la estricta política de revisión de código para el desarrollo (rama de integración verdadera), entonces el desarrollador 1 podría fusionarse para desarrollar para que el desarrollador 2 pueda extraer. Otra complicación es que también estamos obligados a hacer algunas pruebas preliminares como parte del proceso de revisión del código antes de pasar la función a QA. Esto significa que incluso si el desarrollador front-end 1 se está retirando directamente de la rama del desarrollador back-end 2, ya que vaya, si el desarrollador back-end 2 finaliza y su solicitud de extracción está en revisión de código durante una semana, entonces el desarrollador front-end 2 técnicamente no puede crear su solicitud de extracción / revisión de código porque su revisor de código no puede prueba porque el desarrollador de back-end 2 '
La conclusión es que nos estamos encontrando en un enfoque mucho más serial en lugar de paralelo en este caso, dependiendo de la ruta que tomemos, y nos gustaría encontrar un proceso para evitarlo.
Lo último que mencionaré es que nos damos cuenta de que al compartir código entre sucursales que aún no han sido revisados y finalizados, en esencia estamos usando el código beta de otros. Hasta cierto punto, no creo que podamos evitar eso y estamos dispuestos a aceptarlo hasta cierto punto.