Gitflow – Qué es, y como usarlo.
Git, hoy en día es uno de los sistemas de control de
versiones más populares, por la flexibilidad de poder trabajar con ramas
(branches) y agregar nuevas funcionalidades, sin poner en “peligro” de inconsistencias
en nuestro proyecto actual (producción).
Gitflow, es un modelo de flujo de trabajo de Git, con el uso
de ramas, que fue publicado por Vincent Driessen en nvie (http://nvie.com/posts/a-successful-git-branching-model/),
que nos permite un mejor control de proyectos medianos/grandes.
Este modelo de trabajo, asigna roles específicos a las ramas
y define como se debe interactuar entre ellas. Adicional a las ramas de features, que usa el modelo: Feature
Branch Workflow (https://www.atlassian.com/git/tutorials/comparing-workflows/feature-branch-workflow),
se usan ramas especializadas para desarrollo, soporte, revisiones y lanzamientos.
Así mismo, existe el git-flow toolset (https://github.com/nvie/gitflow), el
cual se integra con git para permitirnos usar comandos que nos ayuden a
automatizar algunas partes del flujo propuesto.
Empezamos!
Gitflow, como se dijo, es un marco de trabajo, es una idea abstracta un flujo de trabajo en Git. Esto significa, que este flujo de trabajo, nos dice que ramos debemos crear, y como se relacionan entre si.
Existen paquetes para git-flow,
para el SO que se utilice. Para Windows, viene pre instalado en el paquete
instalador de Git (https://git-scm.com/download/win).
Luego de la instalación, se puede usar utilizando el comando
git flow init. Este comando no cambia
nada, a excepción de que crea ramas predefinidas.
Cómo funciona
Ramas Develop y Master
En lugar de usar una única rama master, que gestiona toda la
información del proyecto, este marco utiliza dos ramas. La rama master,
almacena los lanzamientos oficiales, etiquetando la versión a la que pertenece.
La rama develop (desarrollo) sirve para realizar la integración con las ramas
de features (ramas de características particulares a desarrollarse).
git branch develop
git push origin develop
Esta rama, es la que tendrá toda la historia del Proyecto. El
resto de desarrolladores que colaboren con el proyecto, deben clonar esta rama.
Cada nueva característica a agregar al proyecto, debe ser
creada bajo su propia rama, la cual debe ser enviado al repositorio centra. En
este caso en lugar de utilizar la rama master, se debe enviar a la rama
develop. Cuando la característica está completa, se debe unir con la rama
develop. Nunca una rama de característica debe interactuar directamente con la
rama master.
Como empezar una rama de característica.
Sin la extensión git-flow
git checkout develop
git checkout –b nombre_caracteristica
Con la extensión git-flow:
git flow feature start nombre_caracteristica
Como terminar una rama de característica.
Cuando se haya terminado con el desarrollo de la nueva característica
del proyecto, el siguiente paso es realizar la migración (merge) con la rama
develop.
Sin la extensión git-flow
git checkout develop
git merge nombre_caracteristica
Con la extensión git-flow:
git flow feature finish nombre_caracteristica
Ramas Release
Una vez que la rama develop, haya obtenido las características
necesarias para un lanzamiento (release), se necesita bifurcar a una rama release
fuera de la rama develop.
Creando esta rama, empieza el siguiente ciclo de
lanzamiento, entonces a esta rama, no se le puede agregar nuevas características,
solo se deben agregar documentación u otro elemento propio de un lanzamiento.
Una vez listo, la rama reléase es única en la rama master, y
etiquetada con su número de versión respectiva.
Usar una rama dedicada para preparar el lanzamiento, hace
posible que un equipo especializado lo optimice, mientras que el equipo de
desarrollo puede seguir con su trabajo, agregando nuevas características en la
rama develop.
Como empezar una rama de lanzamiento.
Sin la extensión git-flow
git checkout develop
git checkout –b release/0.1.0
Con la extensión git-flow:
git flow release start 0.1.0
Como terminar una rama de lanzamiento.
Una vez se haya realizado el lanzamiento, este debe ser
unido a la rama master y develop, y la rama release, debe ser eliminada.
Sin la extensión
git-flow
git checkout develop
git merge release/0.1.0
git checkout master
git checkout merge release/0.1.0
Con la extensión git-flow
git flow release finish 0.1.0
Ramas Hotfix
Las ramas
de mantenimiento o “hotfix”, son usadar para “parchar” versiones en producción.
Las ramas
Hotfix, son las únicas que se bifurcan directamente de la rama master. Tan
pronto como la solución o “parche” esta dado, se une a la rama master, con su
respectiva etiqueta de versión, y a la vez a la rama develop.
Como empezar una rama de hotfix.
Sin la extensión git-flow
git checkout master
git checkout –b nombre_parche
Con la extensión git-flow
git flow hotfix start nombre_parche
Como terminar una rama de hotfix.
Una vez se haya realizado el parche, este debe ser unido a
la rama master y develop.
Sin la extensión
git-flow
git checkout master
git merge nombre_parche
git checkout develop
git merge nombre_parche
git branch –D nombre_parche
Con la extensión git-flow
git flow hotfix finish nombre_parche