Integración continua de Software: GIT y GIT FLOW

Compartir en

Podcast Transformación Digital en Latam

Ilustración 3 Ejemplo de las diferentes ramas durante el desarrollo de un proyecto

¿Qué son GIT y GIT FLOW?

Git es un sistema de control de versiones que permite llevar un registro de los cambios que se hacen sobre uno o más archivos, lo que termina siendo un software en el cual puedo informarme sobre quién cambió algo, que cambió y el porqué (Cooper, 2020).

¿Qué no es Git? No es Github (Cooper, 2020). Respuesta escueta, pero poderosa.

 

“Git es un sistema de control de versiones que nos permite llevar un registro de los cambios que se hacen sobre uno o más archivos”

 

Exploremos algunos conceptos de Git:

Repositorio (Conocido como Repo):

En un Repositorio podemos guardar los archivos necesarios para nuestros  proyectos (Github.com, 2020)

Los repositorios se pueden encontrar en  servidores que proveen este tipo de servicios (Como son Github, Bitbucket, Gitlab).

Si bien Git no es el único sistema de control de versiones, es el más popular. siendo usado por la mayoría de los desarrolladores (Open Hub, 2020), ya que permite acciones como guardar el  trabajo avanzado, coordinar el trabajo para múltiples desarrolladores en un solo proyecto, manejar diferentes versiones de aplicación en desarrollo, conciliar conflictos en los cambios de un archivo

Ilustración 1. Uso de git en repositorios open source. (Open Hub, 2020)

Ilustración 1. Uso de git en repositorios open source.  (Open Hub, 2020).

Ramas (Branches en inglés)

En Git son importantes las ramas (Branches en inglés). Todo repo va a contener una línea de tiempo sobre la cual se marcarán los cambios que se  hagan sobre los archivos, ésta sería una Rama.

Una Rama son los registros donde se marcan los cambios que haga uno o varios programadores en un conjunto de archivos en una línea de tiempo (estas características se pueden configurar).

Los repos traen consigo una rama llamada “master” y es la principal en todos los proyectos. A partir de esta rama se pueden crear otras ramas  (Por lo tanto, otras líneas de tiempo, y sí, para los Geeks es similar a tener multiversos, ¡como en los Avengers!)

En las ramas que se configuren se pueden administrar cambios de igual forma que en la rama Master  sin afectar su contenido. (Es decir, el contenido de la rama Master).

Dado que las ramas son líneas de tiempo se puede configurar a partir de qué momento se creará una rama, a partir de la rama master.

Ilustración 2. Línea de tiempo "master" con una nueva rama creada a partir de un cambio ya hecho en el estado del proyecto.Ilustración 2. Línea de tiempo «master» con una nueva rama creada a partir de un cambio ya hecho en el estado del proyecto.

¿Para qué crear y configurar nuevas ramas? Veamos algunos beneficios:

  • Para experimentar nuevas ideas en tu proyecto de forma segura porque podrás tener siempre la rama principal inalterada.
  • Podrás solucionar bugs configurando una rama a partir del momento en que surgen, así lo harás con más seguridad y tranquilidad
  • Podrás desarrollar y probar nuevas funcionalidades requeridas en tu proyecto antes de integrarlas a tu rama principal para una posterior entrega de valor.

Las ramas podrán ser combinadas para actualizar el contenido  en la rama principal o para agregar nuevas funcionalidades en la rama principal, por ejemplo. Así las cosas, las ramas pueden ser mezcladas (Merge), borradas y creadas.

Gitflow

Para establecer un manejo adecuado de las ramas dentro de los repos de Git existen diferentes flujos de trabajo a seguir para generar menos conflictos entre cambios según las mejores prácticas y la lógica de trabajo del equipo del proyecto o iniciativa.

Gitflow es uno de esos flujos de trabajo y se basa en cinco palabras clave durante la construcción de una aplicación y sus respectivas entregas de valor.

Master

Es la rama principal de proyecto , donde va el código para generar la aplicación en entornos de producción. Sobre ella no se debería desarrollar.

Hotfix

Este tipo de rama se crea para la solución de un incidente. Debe ser generada a partir de Master. También se relaciona con el término “cambios en caliente”.

Hotfix se utiliza en ambientes en producción para resolver incidentes.

Develop

En esta rama se tienen las nuevas funcionalidades de la aplicación. No es aconsejable hacer commit (guardar cambios) directamente sobre ella, excepto si son cambios pequeños y que no afecten la lógica, por ejemplo, cambiar un texto.

Feature

Rama generada a partir de la rama develop. Sobre ella se harán los desarrollos de nuevas funcionalidades. Una vez esté desarrollada la funcionalidad la rama feature podrá ser mezclada con Develop para que los cambios queden allí sincronizados, y finalmente se procede a borrar la rama feature. Es aconsejable tener esta rama sincronizada con los cambios que se agreguen a la rama develop para evitar conflictos.

Release

Esta rama utiliza para las entregas a producción o ambiente real. Su propósito es habilitar que en ella se hagan las  pruebas del cliente y propender por la calidad de la entrega. Una vez se termine con las pruebas y sean exitosas se  mezcla con la rama master. Y se sale a producción.

Es decir que esta rama se crea para hacer el release, y se borra al tenerla integrada con Master.

Ilustración 3 Ejemplo de las diferentes ramas durante el desarrollo de un proyectoIlustración 3 Ejemplo de las diferentes ramas durante el desarrollo de un proyecto.

Flujo de trabajo en un proyecto

En la ilustración 3 podemos apreciar el flujo de trabajo mientras se desarrolla un proyecto.

En la versión 0.1 se hizo la creación del proyecto y aplicación.

A partir de allí se creó una rama develop para el desarrollo de nuevas características, y a su vez se generaron dos ramas feature (con nombres diferentes, pero con la palabra feature en ellas, por ejemplo feature-admin-page) y una de las cuales fue terminada y mezclada con develop.

Si bien el proyecto recién fue creado por algún motivo un incidente surgió y se debe realizar un “cambio en caliente”, por lo que se generó una rama llamada hotfix que permitirá solucionar el incidente y debe ser mezclada con master y develop para luego ser borrada.

Finalmente tenemos la rama release generada a partir de develop y sobre la cual se harán las respectivas pruebas para aprobar o no el código nuevo.

Conclusión

Con un flujo de este tipo hace que el manejo del repositorio y sus ramas sea mucho más lógico reduciendo considerablemente los conflictos generados entre el código de los desarrolladores y al ser tanto podrían generar pérdidas de código o que terminan generando desperdicios de tiempo y reproceso. Además, es una buena práctica de Git junto con muchas otras que te permitirán tener una rápida entrega de valor y que funciona para tecnologías como #javascript, #typescript, #python, #java, #go, #ruby, #php y muchos más.

Una reflexión adicional:

Nosotros vemos necesaria  la implementación de  herramientas  como GitFlow y  métodos y herramientas como las que propone DevOps para la maximización de flujo de valor y la minimización del desperdicio, Objetivos fundamentales de Lean – Agile.

Te invitamos a implementar Git o Mejor aún GitFlow y a utilizar Devops en tus proyectos de Software. ¿ Quieres que te ayudemos? –> Escríbenos

Artículo escrito por Álvaro García en colaboración con Juan Andrés Ochoa y Felipe Mejía

Referencias

Cooper, K. (2020, April 19). Understanding Git (part 1) — Explain it Like I’m Five. Retrieved from Hacker Noon: https://hackernoon.com/understanding-git-fcffd87c15a3

Github.com. (2020, April 19). About repositories. Retrieved from Hithub Help: https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-repositories

Open Hub. (2020, April 23). Compare Repositories. Retrieved from Open Hub: https://www.openhub.net/repositories/compare

Mantente al tanto de nuestras publicaciones a través de nuestras redes sociales: LinkedIn, Instagram y Twitter.

Álvaro García

Álvaro García

Ingeniero Electrónico. Programar terminó siendo mi hobby y me permitió embarcarme en la aventura del desarrollo de software. Pedaleo por mis sueños(Sí, como Egan Bernal). Gamer.

Contáctanos

Comunicate con nosotros

Estamos acá para acompañarte en tus estrategias de  Transformación Digital.

Cualquier inquietud no dudes en comunicarse con nosotros.

  • Solicitar propuestas
  • Preguntas sobre nuestros servicios
  • Requerir consultoría profesional
× ¿Cómo podemos ayudarte?