Creo que este artículo, A Successful Git Branching Model , es muy conocido entre los usuarios experimentados de DVCS.
Lo uso hg
principalmente, pero diría que esta discusión está bien para cualquier DVCS.
Nuestro flujo de trabajo actual es que cada desarrollador clona el repositorio principal. Escribimos código en nuestro propio repositorio local, ejecutamos pruebas y, si todo va bien, lo empuja al maestro.
Por lo tanto, queremos configurar servidores CI como Jenkins y mejorar nuestro flujo de trabajo con el futuro sistema de aprovisionamiento (chef, puppet, ansible, etc.).
Parte real
Bueno, el modelo presentado anteriormente funciona bien, pero las ramas pueden romper CI. La rama de la característica debe sincronizarse con el origen (según el artículo, sería una development
rama) para hacer que CI y la fusión sean suaves, ¿verdad?
Digamos que Alice y Bob están trabajando en dos características. Pero Alice terminó al día siguiente. La característica de Bob lleva una semana. Cuando Bob termina, sus cambios están desactualizados (tal vez Alice refactorizó / renombra algunas clases).
Una solución es cada mañana que los desarrolladores deben sacar master/origin
para verificar si hay algún cambio. Si Alice se comprometió, Bob debería ingresar y fusionarse en su espacio de trabajo para que su rama de características esté actualizada.
- ¿Es esta una buena manera?
- ¿Deberían existir estas ramas en el repositorio principal (no en el clon local?) ¿Es decir, todo desarrollador debe tener privilegios de compromiso para el repositorio principal en GitHub / Bitbucket para poder crear una nueva sucursal? ¿O esto se hace localmente?
- Por último, el modelo presentado por el artículo debería romper el CI si las ramas no están sincronizadas con el
origin/master
. Dado que queremos hacer una compilación nocturna, ¿deberían los desarrolladores extraer y fusionar antes de dejar el trabajo, y hacer que CI se ejecute también en cada rama de características?