GitHub Flow, una forma ligera y eficaz para gestionar tu Software

Por Fernando Paz Actualizado por Samir Zurita 24 de julio de 2024
DevOpsGit
GitHub Flow, una forma ligera y eficaz para gestionar tu Software

En el mundo del desarrollo de software y la gestión de productos digitales, mantener un flujo de trabajo eficiente y colaborativo es crucial. Se presenta aquí a GitHub Flow, una forma ligera y eficaz para gestionar tu Software. Exploraremos qué es GitHub Flow, cómo funciona, por qué podría ser la estrategia perfecta para tu equipo de TI y en qué se diferencia de otros modelos como GitFlow.

¿Qué es GitHub Flow?

GitHub Flow es un modelo de flujo de trabajo ligero y basado en ramas que facilita la experimentación y colaboración en equipos de desarrollo. Diseñado para ser simple y efectivo, este flujo se centra en la integración continua (CI) y la entrega frecuente de código.

Creado y promovido por GitHub, este flujo de trabajo propone una alternativa simple frente a otros modelos como GitFlow. Mientras que GitFlow maneja múltiples ramas paralelas (develop, release, hotfix), GitHub Flow se reduce a lo esencial: una rama principal (main) y ramas de características (feature branches).

¿GitHub Flow vs GitFlow? Aunque los nombres son similares, son conceptos distintos. GitHub Flow es un flujo creado por GitHub (Scott Chacon, 2011) que prioriza la simplicidad y el despliegue continuo. GitFlow (Vincent Driessen, 2010) introduce ramas adicionales para soportar releases, hotfixes y mantenimiento paralelo. GitHub Flow es ideal para equipos que hacen despliegue continuo; GitFlow funciona mejor cuando se manejan versiones con soporte a largo plazo.

El proceso de GitHub Flow

El siguiente diagrama muestra el flujo de trabajo propuesto por GitHub Flow:

  1. Crear una rama: Todo comienza con la creación de una nueva rama desde main (la rama por defecto), para trabajar en una nueva característica o corrección. Por convención, se suele nombrar con un prefijo como feature/, fix/ o chore/.

  2. Realizar cambios: En esta nueva rama, haces commits con tus cambios, iterando sobre tu trabajo. Se recomienda hacer commits pequeños y frecuentes con mensajes descriptivos.

  3. Abrir un Pull Request: Cuando estés listo para el feedback —incluso antes de terminar (Draft PR)— abre un Pull Request. Esto inicia la conversación sobre tus cambios y dispara los pipelines de CI.

  4. Discusión y revisión: Tus colaboradores revisan el código, sugieren mejoras y discuten los cambios propuestos. Las revisiones de código automatizadas (linters, análisis estático) complementan este paso.

  5. Implementar cambios: Basado en el feedback, puedes seguir haciendo commits en tu rama para mejorar tu propuesta. Cada nuevo commit actualiza el PR automáticamente.

  6. Fusionar en main: Una vez que los cambios son aprobados y las pruebas pasan, se fusionan en la rama principal. Estrategias comunes: merge commit, squash y merge, o rebase y merge.

  7. Desplegar: Con los cambios en main, el despliegue se dispara de forma automática o manual. La rama main siempre debe permanecer en un estado potencialmente desplegable.

Diagrama de flujo del proceso GitHub Flow con 7 pasos

¿Por qué GitHub Flow y no GitFlow?

AspectoGitHub FlowGitFlow
ComplejidadBaja. Solo main + ramas de features.Alta. main, develop, release/, hotfix/.
DespliegueContinuo. Cada merge a main puede ir a producción.Por releases. Se acumulan cambios en develop.
HotfixesSe manejan igual que cualquier feature: rama + PR.Rama hotfix/ desde main, se fusiona a main y develop.
Equipo idealEquipos pequeños/medianos con despliegue continuo.Equipos grandes con versiones múltiples y releases programadas.
Curva de aprendizajeBaja. Intuitivo incluso para desarrolladores junior.Media. Requiere entender el propósito de cada rama.

Casos de uso sugeridos

  • Desarrollo de nuevas características: Ideal para trabajar en nuevas funcionalidades sin afectar el código en producción.
  • Corrección de errores: Permite aislar y resolver problemas rápidamente.
  • Experimentación: Perfecto para probar nuevas ideas sin comprometer la estabilidad del proyecto.
  • Revisión de código: Facilita la revisión y discusión de cambios antes de integrarlos.
  • Releases continuas: Permite una entrega más frecuente y controlada de nuevas versiones.

Beneficios de adoptar GitHub Flow

  • Simplicidad: Un flujo fácil de entender y seguir para todos los miembros del equipo.
  • Flexibilidad: Se adapta a diferentes tamaños de equipos y tipos de proyectos.
  • Rápida iteración: Permite ciclos de desarrollo más cortos y ágiles.
  • Mejor colaboración: Fomenta la discusión y revisión de código entre el equipo.
  • Calidad mejorada: La revisión constante ayuda a mantener un alto estándar de código.
  • Despliegue continuo (CD): Facilita la implementación de prácticas de CI/CD.
  • Transparencia: Todos pueden ver y contribuir al progreso del proyecto.

Buenas prácticas para maximizar los beneficios de GitHub Flow:

Pull Requests pequeños y frecuentes

Un PR debe ser lo suficientemente pequeño para que un revisor lo entienda en menos de 30 minutos. Si un PR abarca múltiples funcionalidades no relacionadas, divídelo.

Protección de ramas

Configura reglas de protección en main:

  • Requerir al menos una aprobación en el PR.
  • Requerir que los checks de CI pasen antes de fusionar.
  • Requerir que la rama esté actualizada con main.
  • No permitir pushes directos a main.

Merge Queue (cola de fusión)

GitHub Merge Queue encola los PRs aprobados y los fusiona automáticamente cuando pasan los checks, evitando que cambios en main rompan PRs en espera. Si bien no es parte de GitHub Flow, lo complementa muy bien en ciertos escenarios.

Automatización con GitHub Actions

Los pipelines de CI/CD se definen como código YAML dentro del repositorio (.github/workflows/). Al abrir o actualizar un PR, se ejecutan automáticamente. GitHub Flow no depende de GitHub Actions y puede funcionar vien con otras soluciones de CI/CD como GitLab CI.

Convención de nombres de ramas

feature/SE-123-inicio-sesion
fix/SE-456-error-pago
chore/SE-789-actualizar-deps

Consideraciones y desafíos

Aunque GitHub Flow ofrece numerosos beneficios, es importante considerar también sus limitaciones:

  • Dificultad con versiones múltiples: GitHub Flow está diseñado principalmente para mantener una versión principal del software. Si tu producto requiere mantener y dar soporte a múltiples versiones simultáneamente (por ejemplo, para diferentes clientes o plataformas), este flujo puede resultar complicado de gestionar.

  • Complejidad en proyectos grandes: En proyectos muy extensos o con un gran número de colaboradores, el flujo puede volverse caótico si no se gestiona cuidadosamente. La cantidad de ramas y pull requests puede ser abrumadora sin una organización adecuada.

  • Dependencia de CI/CD: GitHub Flow funciona mejor cuando se implementa junto con prácticas robustas de Integración Continua y Despliegue Continuo (CI/CD). Establecer y mantener esta infraestructura puede ser un desafío para equipos más pequeños o con recursos limitados.

  • Disciplina del equipo: Requiere que todo el equipo mantenga main siempre en estado desplegable. Un merge descuidado puede afectar a todo el equipo.

Cuándo elegir GitHub Flow vs GitFlow

Elige GitHub Flow si:

  • Tu equipo hace despliegue continuo (varias veces al día o a la semana).
  • Tienes un producto SaaS donde solo mantienes una versión.
  • Quieres un flujo simple que cualquier desarrollador entienda rápidamente.
  • Tus pruebas automatizadas son robustas y rápidas.

Elige GitFlow si:

  • Necesitas mantener versiones LTS (Long Term Support) simultáneas.
  • Tus releases son programadas (semanales, mensuales).
  • Tienes un equipo grande donde necesitas separar claramente desarrollo de releases.
  • Tus pruebas son lentas y no puedes hacer CI rápido en cada PR.

Conclusiones

GitHub Flow ofrece un enfoque ágil y efectivo para la gestión de versiones en productos digitales. Su simplicidad lo hace accesible, mientras que su potencia lo hace aplicable desde pequeños equipos hasta muchas organizaciones que practican entrega continua.

Al adoptar GitHub Flow, los equipos de TI pueden mejorar su colaboración, aumentar la calidad del código y acelerar el ciclo de desarrollo, llevando sus productos digitales al siguiente nivel.

Comparativa entre GitHub Flow y GitFlow

Por supuesto hay otras propuestas para la gestión del versionamiento, como GitLab Flow o Trunk-Based Development, que pueden aplicar en escenarios donde necesitamos más control o tenemos que dar mantenimiento a versiones específicas.

Volver al blog

Cuéntanos qué quieres lograr

Te ayudamos a encontrar la mejor solución para tu negocio.

Hablar con un asesor