Git Flow

Escenarios habituales
| Entorno | Rama |
|---|---|
| Producción | En producción (master) |
| Preproducción | Versión candidata (sta) |
| Desarrollo | Desarrollo actual (dev) |
Como este es un ejemplo, puede diferir de la realidad.
Qué espera el producto de tu código
Si sigues un escenario parecido al del ejemplo, probablemente sabes que no puedes simplemente agregar funcionalidades a master ni publicar correcciones urgentes en master sin integrarlas en staging, o viceversa. Por eso debemos seguir una serie de pasos antes de publicar funcionalidades nuevas o correcciones urgentes.
Agregar una funcionalidad
- Actualiza dev, empieza a programar y luego envía la rama al repositorio remoto.
- De vez en cuando, integra con staging y despliega.
- Si algo no funciona en staging, corrígelo en esa rama.
- Si todo funciona en staging, integra y envía los cambios a master y despliega a producción.
¡Un error en producción!
- Pasa a la rama master, corrígelo y luego… envía los cambios a master e integra master en staging y development para que esas ramas también queden libres del error.
Mejorar este flujo
Como Staging es nuestro servidor para probar funcionalidades nuevas… La rama sta es nuestra próxima versión que se publicará, o rama de versión candidata.
Introducir un flujo para funcionalidades
- Crea una rama nueva basada en staging.
- Si necesitas colaborar, envía la rama de la funcionalidad a origin.
- Cuando esté terminada, intégrala en staging.
- Luego elimina la rama de la funcionalidad.
Introducir un flujo para correcciones urgentes
- Una corrección urgente es una solución que debe aplicarse en producción.
- Crea una rama nueva basada en master.
- Programa la corrección e intégrala en master y sta.
- Después de las dos integraciones, elimina la rama de la corrección urgente.
Hasta aquí…
Si seguimos cada paso, estaremos usando un buen flujo de trabajo.
Pero la creación, integración y eliminación de las ramas de funcionalidades y correcciones urgentes se pueden automatizar.
git-flow
Git Flow es una extensión de Git. Se creó para seguir estos pasos sin complicaciones.
Instalar git-flow
En Linux: sudo apt-get install git-flow
En Mac: brew install git-flow
Inicializar git-flow en un proyecto existente
Ejecuta git flow init en el proyecto.
Se te preguntará qué comportamiento seguir al crear ramas y cómo definir el propósito de cada una.
No importa en qué rama estés ahora; solo recuerda tener actualizadas las ramas master y sta.
Crear una funcionalidad con Git Flow
git flow feature start <FeatureName>
-- code a little bit
git add .
git commit -m “This is a good commit”
git flow feature finish <FeatureName>
Crear una corrección urgente con Git Flow
git flow hotfix start <HotfixName>
-- code the fix
git add .
git commit -m “This is an awesome fix”
git flow hotfix finish <HotfixName>
Conclusión
Usar git-flow mejorará la forma de mantener el código y también ayudará al equipo a seguir el mismo flujo y a evitar errores de los nuevos integrantes mientras lo aprenden. Git Flow es una convención y se puede adaptar a tus necesidades: simplemente crea tu propia copia.
Diapositivas en: https://speakerdeck.com/rec/git-flow
Nota: este artículo no pretende cubrir los conceptos básicos de git-flow ni ser un tutorial sobre cómo usarlo. Es una introducción al tema y, quizá, una invitación a utilizarlo.