¿Qué es Gitflow?
Cómo comenzar a utilizarlo
English version here!
A principios de 2010, Vincent Driessen escribió un artículo titulado “Un modelo de ramificación Git exitoso”, en el que recomendaba utilizar ramas Git en el ciclo de desarrollo mediante un método conocido como Git-flow. El objetivo era estandarizar la ramificación y la fusión durante la creación de funciones, la gestión de versiones y la gestión de correcciones urgentes para ser coherente y aprovechar los beneficios del modelo de desarrollo “ramificado” de Git. El uso de muchas ramas independientes en Git proporciona mucha flexibilidad, pero puede resultar difícil.
En este artículo vamos a cubrir:
- 1. ¿Qué es Gitflow?
- 2. Ramas Clave en Gitflow
- 3. El Flujo de Trabajo de Gitflow
- 4. Comandos Git en Gitflow
- 5. Beneficios de Gitflow
- 6. Desventajas de Gitflow
- 7. Herramientas para Gitflow
- 8. ¿Cuándo Utilizar Gitflow?
- 9. ¿Cuándo No Utilizar Gitflow?
- 10. Gitflow en la Ingeniería de Datos
¿Estás cómodo? !Comencemos!
1. ¿Qué es Gitflow?
Gitflow es un modelo de ramificación para Git que ofrece un enfoque estructurado para el desarrollo de software. Define ramas específicas para diferentes propósitos y describe cómo deben interactuar. El objetivo es agilizar el proceso de desarrollo, gestionar los lanzamientos (releases) de manera eficaz y facilitar la colaboración entre los miembros del equipo.
2. Ramas Clave en Gitflow
Gitflow utiliza varias ramas de larga y corta duración:
main (or master):
- Esta es la rama principal que representa el código listo para producción.
- Siempre debe estar en un estado estable y listo para su publicación.
- Solo las ramas release se fusionan en la rama principal.
develop (o desarrollo):
- Esta es la rama de integración para todo el desarrollo de features (funcionalidades).
- Es donde se fusionan las ramas de features (funcionalidades) una vez que se completan.
- Es una rama estable, pero puede contener features (funcionalidades) que aún no están listas para su lanzamiento.
feature/*:
- Se trata de ramas de corta duración creadas para desarrollar features (funcionalidades) específicas.
- Se derivan de la rama de desarrollo y se fusionan nuevamente con la rama de desarrollo cuando se completa la feature (función).
- Cada rama feature (función) debe centrarse en una sola función.
release/*:
- Se trata de ramas de corta duración creadas para preparar un release (lanzamiento).
- Se derivan de la rama de desarrollo y se fusionan con la rama principal y la rama de desarrollo cuando se completa el release (lanzamiento).
- Las ramas release (lanzamiento) se utilizan para las pruebas finales y las correcciones de errores antes de un lanzamiento.
hotfix/*:
- Se trata de ramas de corta duración creadas para corregir errores críticos en producción (arreglar las cosas en caliente).
- Se derivan de la rama principal y se fusionan con la rama principal y la rama de desarrollo cuando se completa la corrección urgente.
- Las ramas hotfix se utilizan para correcciones urgentes que no pueden esperar hasta la próxima versión.
3. El Flujo de Trabajo de Gitflow
A continuación se muestra un desglose paso a paso del flujo de trabajo de Gitflow:
Inicialización:
- Se crea la rama principal (normalmente a partir del primer commit).
- La rama de desarrollo se crea a partir de la rama principal.
Desarrollo de Features (funcionalidades):
- Se crea una nueva rama de features (feature/mi-nueva-función) a partir de la rama de desarrollo.
- Los desarrolladores trabajan en dicha funcionalidad en la rama de features y realizan cambios con regularidad (mediante commits).
- Cuando la funcionalidad está completa, la rama de features se fusiona nuevamente con la rama de desarrollo.
Preparación para el Release (lanzamiento):
- Cuando el desarrollo está listo para una versión, se crea una nueva rama release (release/1.0.0) a partir de la rama de desarrollo.
- La rama release se utiliza para las pruebas finales y correcciones de errores.
- No se deben agregar nuevas características a la rama release.
Release (lanzamiento):
- Cuando el release está listo, la rama release se fusiona con la rama main.
- El commit de dicha fusión en la rama main se etiqueta con la versión del release (p. ej., v1.0.0).
- La rama release también se fusiona nuevamente con la rama de desarrollo.
Hotfix:
- Si se encuentra un error crítico en producción, se crea una rama de hotfix (hotfix/fix-critical-bug) desde la rama main.
- El error se corrige en la rama de hotfix.
- La rama hotfix se fusiona con la rama main y la rama de desarrollo.
- El commit de dicha fusión en la rama main se etiqueta con la versión del hotfix (p. ej., v1.0.1).
4. Comandos Git en Gitflow
Estos son los comandos de Git que normalmente usarías en un flujo de trabajo de Gitflow:
Inicialización:
git init # si estás creando un nuevo repo
git branch develop
git checkout develop
Desarrollo de Features (funcionalidades):
git checkout -b feature/my-new-feature develop
git add .
git commit -m "Add my new feature"
git checkout develop
git merge - no-ff feature/my-new-feature # utilizando - no-ff para preservar la historia de la rama feature
git branch -d feature/my-new-feature # elimina la rama feature
Preparación para el Release (lanzamiento):
git checkout -b release/1.0.0 develop
git add .
git commit -m "Preparando el release 1.0.0"
Release (lanzamiento):
git checkout main
git merge - no-ff release/1.0.0
git tag -a v1.0.0 -m "Release 1.0.0"
git checkout develop
git merge - no-ff release/1.0.0
git branch -d release/1.0.0
Hotfix:
git checkout -b hotfix/fix-critical-bug main
git add .
git commit -m "Corrigiendo bug crítico"
git checkout main
git merge - no-ff hotfix/fix-critical-bug
git tag -a v1.0.1 -m "Hotfix 1.0.1"
git checkout develop
git merge - no-ff hotfix/fix-critical-bug
git branch -d hotfix/fix-critical-bug
5. Beneficios de Gitflow
- Flujo de trabajo estructurado: proporciona un flujo de trabajo claro y coherente para el desarrollo y los releases (lanzamientos).
- Estrategia de ramificación clara: facilita la comprensión del propósito de cada rama.
- Gestión de lanzamientos: simplifica el proceso de preparación y lanzamiento de software.
- Gestión de revisiones: proporciona un proceso claro para gestionar errores críticos en producción.
- Colaboración: facilita la colaboración entre los miembros del equipo al proporcionar un proceso bien definido.
6. Desventajas de Gitflow
- Complejidad: puede ser más complejo que los modelos de ramificación más simples, especialmente para equipos más pequeños.
- Sobreesfuerzo: requiere más ramificaciones y más fusiones, lo que puede agregar sobreesfuerzo.
- No es ideal para la entrega continua: puede no ser la mejor opción para equipos que practican la continuous delivery (entrega continua), donde los lanzamientos son frecuentes y automatizados.
7. Herramientas para Gitflow
Hay algunas herramientas que pueden ayudar a simplificar Gitflow:
- Extensión Gitflow: Una extensión de línea de comandos que proporciona comandos para administrar ramas de Gitflow (por ejemplo, git flow init, git flow feature start, git flow release start).
- SourceTree: Una interfaz gráfica de usuario para Git que tiene soporte integrado para Gitflow.
- GitKraken: Otra interfaz gráfica de usuario para Git con soporte para Gitflow.
8. ¿Cuándo Utilizar Gitflow?
Gitflow es una buena opción para proyectos que:
- Tienen ciclos de lanzamiento estructurados.
- Requieren una clara separación entre desarrollo y producción.
- Tienen un equipo de varios desarrolladores.
- Necesitan un proceso bien definido para gestionar las correcciones urgentes.
9. ¿Cuándo No Utilizar Gitflow?
Gitflow puede no ser la mejor opción para proyectos que:
- Practiquen la entrega continua.
- Tengan un equipo pequeño.
- Requieran un modelo de ramificación más simple.
- Realicen lanzamientos con mucha frecuencia.
10. Gitflow en la Ingeniería de Datos
En ingeniería de datos, Gitflow se puede utilizar para administrar:
- Scripts ETL y pipelines de datos.
- Modelos y esquemas de datos.
- Archivos de configuración para infraestructura de datos.
- Modelos de machine learning.
Se aplican los mismos principios: ramas feature para nuevas funcionalidades, ramas release de lanzamiento para preparar despliegues y ramas hotfix para correcciones de errores críticos.
En Resumen
Gitflow es un modelo de ramificación potente que puede ayudar a los equipos a gestionar proyectos de software complejos. Proporciona un flujo de trabajo estructurado, una estrategia de ramificación clara y una gestión eficaz de las versiones. Sin embargo, es importante tener en cuenta la complejidad y los costes generales antes de adoptar Gitflow. Si tu proyecto cumple los criterios, Gitflow puede ser una herramienta valiosa para mejorar tu proceso de desarrollo de software.
¡Gracias por la Leída!. ¿Qué tal otros Artículos?
¿Qué te Convierte en un Gran Ingeniero de Datos?
Áreas clave para destacar
davidregalado255.medium.com
¿Querías más?
Deja presionado el botón de 👏 hasta que llegue a 50 y comenta qué otro tipo de artículos quisieras que escriba.
- Sigue a David Regalado para más contenido educacional.