Introducción.
Es muy probable que en nuestra vida como desarrolladores de software hayamos tenido que implementar un sistema para gestionar el antes y el después de nuestro proyectos. Con los sistemas de control de versiones nos evitamos la pérdida de tiempo y recursos en implementar un sistema que nos ayude en el tiempo con el desarrollo de aplicaciones. En este artículo veremos una introducción a GitFlow, y daremos nuestros primeros paso en un sistema de control de versiones.
¿Qué es un sistema de control de versiones?
Un sistema de control de versiones es una herramienta que nos ayuda a gestionar en el tiempo los cambios que se realizan en un archivo o conjunto de archivos de un proyecto de software, de modo que podamos recuperar un cambio específico.
Existen muchos sistema de control de versiones. Entre los más utilizados tenemos CVS, Subversion, Mercurial, Git y Bazaar. Para este artículo veremos Git en las exensiones de GitFlow.
¿Qué es Git?
Es un software de control de versiones, que proporciona herramientas para llevar registro de los cambios en archivos de un computador y coordina el trabajo que varias personas realizan sobre archivos compartidos. Diseñado por Linus Torvalds, pensando en la eficiencia y la confiabilidad del control de versiones, de proyectos de desarrollo de software, cuando éstos tienen muchos archivos de código fuente. ¿Quieres saber más?
¿Qué es GitFlow?
Vincent Driessen presentó en su blog un modelo. Es un modelo de flujo de trabajo ramificado, que asigna roles a un conjunto de ramas y define cómo deben interactuar entre ellas. Actualmente este modelo se presenta en un conjunto liviano de herramientas para el control de versiones con Git, que proveen comandos para gestionar ramas, el cual se denomina Git Flow.

¿Cómo instalar GitFlow?
Ahora veremos como instalar GitFlow en los sistema operativo Linux, Mac y Windows.
Sistemas Linux.
En sistemas Linux podemos instalar GitFlow desde la terminal con la siguiente sentencia:
Debian
sudo apt install git-flow
Fedora
sudo dnf install gitflow
Sistema Mac OS X.
Al igual que en sistemas Linux, instalar git flow en Mac OS X es muy fácil. Digitamos una terminal la siguiente sentencia:
brew install git-flow
O
port install git-flow
Sistema Windows
En sistema windows podemos instalar Git Flow, instalando Git para Windows, ya que viene incluido por defecto en el instalador de Git de Windows.
Entendiendo el Modelo de Git Flow.
Como ya sabemos, Git Flow es un modelo de control de flujo ramificado. Su control es basado en ramas, teniendo dos ramas principales y tres ramas auxiliares, de las cuales hablaremos a continuación.
Ramas Principales
El modelo de Git Flow está basado en dos ramas principales infinitas en el tiempo. En estas ramas no se podrá hacer modificaciones directas, recibiendo los cambios solo de sus ramas auxiliares. Las ramas principales son:
- Master -> Rama principal de producción.
- Develop -> Rama principal de desarrollo.
Ramas Auxiliares
En el modelo de Git Flow existen tres ramas auxiliares, las cuales se encargan de agregar los cambios a las ramas principales. Estas son las ramas auxiliares:
- Feature -> se utiliza para agregar nuevas características al proyecto en desarrollo.
- Release -> se utiliza para agregar nuevas versiones a producción.
- Hotfix -> se utiliza para corregir fallas menores que se detectaron en producción.
Todas las etiquetas de las ramas principal y auxiliares pueden ser modificas. Se recomienda utilizar las predeterminadas de Git Flow (master, develop, feature, release y hotfix). Como ejemplo, podríamos utilizar la rama master con la etiqueta producción. Estas etiquetas se pueden modificar al momento que inicia el control de versión con git flow.
Agregando cambios a las ramas Principales
Como ya mencionamos, las ramas principales solo reciben cambios de sus ramas auxiliares, donde master recibe cambios de las ramas release y hotfix. De manera similar, la rama develop recibe los cambios de las ramas feature, release y hotfix.
Para ver cómo se agregan los cambios, utilizaremos como ejemplo el proyecto creado en Persistencia con Sqlite implementando JDBC.
Iniciamos el Control de Versión.
Iniciamos el proyecto con Maven. Creamos las carpetas controller, view y model y después cambiamos el contenido del pom.xml. Luego iniciamos el control de versión con git flow con la siguiente sentencia desde una terminal:
git flow init
Para entender un poco mejor, se cambiaron las etiqueta de master por producción y develop por desarrollo. Sin embargo, se recomienda utilizar las predeterminada por el modelo de GitFlow.
Una vez que iniciamos el control de versiones, git flow habrá trasladado a la rama de desarrollo como se muestra en la imagen anterior y además habrá creado nuestro primer commit.
Creando las Ramas Feature.

Como podemos ver en la imagen Feature, esta rama parte de la rama desarrollo (develop) y una vez finalizado, retorna a la rama desarrollo (develop).
Siguiendo con el ejemplo tomando el proyecto de Persistencia con Sqlite implementando JDBC. vamos a crear una feature con el nombre de “connection” con la siguiente sentencia:
git flow feature start connection
Se crea la clase ConnectionBD y se crea el directorio ../var/db, agregamos los cambios al repositorio con los siguientes comando de git
git add .
git commit -m "Se agrega conexion a la base de datos"
Ya agregado el cambio en la rama connection enviaremos el cambio a la rama principal de feature con la siguiente sentencia:
git flow feature finish connection
Una vez que los cambios estén en desarrollo, seguimos los mismos pasos para las demás características que se le agregan al proyecto. Por ejemplo:
Creando rama Release.

La rama Release parte de la rama desarrollo (develop) y traslada los cambios a la rama producción (master) como una nueva versión del proyecto y a la rama desarrollo (develop) con posibles correcciones detectadas antes de agregar la nueva versión a producción.
Para enviar los cambios de la nueva version a producción (master) lo haremos con los siguientes comando:
Primeramente agregamos la rama auxiliar release:
git flow release start V1.0
Si tenemos fallas detectadas en esta rama, hacemos los commits necesarios, y después enviamos los cambios a producción (master) con el comando:
git flow release finish V1.0
Reparando fallas de producción.

La rama auxiliar hotfix se utiliza para corregir fallas que se encontraron en producción (master), los cuales haremos con las siguientes sentencias:
Primeramente creamos la rama auxiliar :
git flow hotfix start V1.1
Una vez creada la rama, agregamos las correcciones necesarias y las hacemos efectivas con commit. Después trasladamos los cambios a producción y a desarrollo con la siguiente sentencia:
git flow hotfix finish V1.1
Hasta aquí hemos hecho un ciclo del modelo de git flow enviando las modificaciones de las ramas auxiliares a las ramas principales.
Ventajas y desventajas de utilizar Git Flow.
Ventajas
- Asegura claridad en el ciclo de vida de cada rama.
- Las ramas siguen un patrón semántico.
- Puedes desarrollar en paralelo.
Desventajas
- Puede hacer que la historia se vuelva ilegible.
- Algunas ramas se consideran redundantes.
- Dificulta la entrega continua.