Git Flow con Git

Antonio J. Galisteo

Git Flow, podemos decir que es, una forma de trabajar con Git. Primero vamos a ver el concepto.

Con git flow, vamos a tener varios tipos de ramas, ramas principales, ramas auxiliares, ramas release y ramas hotfix.

Ramas Principales:

  • master. Contiene el código de producción donde cada commit debe estar marcado con un tag indicando la versión. No se trabaja en ella directamente.
  • develop. Rama principal del desarrollo que contendrá el código de la próxima versión.

Ramas Auxiliares:

  • Origen: develop
  • Destino: develop
  • Nombre: feature/nombre_funcionalidad

Las ramas feature las creamos y fusionamos desde la rama develop. Se utilizan para separar el código entre los miembros del equipo y añadir funcionalidad nueva. El tiempo de vida de estas ramas suele ser corto y por norma general no están en el repositorio remoto, esto es, no se les hace push, sino que se hace push de la develop una vez mergeada la feature.

En la siguiente imagen podéis verlo con más claridad:

Modelo de Ramas con Git Flow

Ahora, vamos a ver los comandos de git para trabajar con git-flow.

Lo primero que tenemos que hacer es inicializar git flow. Esto lo hacemos de la siguiente forma:

git flow init

Esto nos hará las siguientes preguntas, podemos dejar la configuración por defecto pulsando enter hasta terminar:

Git Flow Init

Una vez configurado ya podemos usar git flow.

Para crear una rama feature con git-flow (desde develop):

git flow feature start nombre_rama

El equivalente con git sería:

git checkout -b feature/nombre_rama develop

Una vez terminado nuestro trabajo, finalizamos la rama como sigue (una vez hecho commit):

git flow feature finish nombre_rama

Si nuestra rama esta desactualizada con respecto a remoto, es posible que nos de algún error y siempre puedes cambiarte a la rama develop, actualizarla y hacerlo de la manera tradicional:

git checkout develop
git fetch
git pull origin develop
git merge --no-ff feature/nombre_rama
git branch -d feature/nombre_rama

Ramas Release:

  • Origen: develop
  • Destino: master y develop
  • Nombre: release/nombre_version

Estas ramas se crean siempre a partir de la rama develop. En ellas se hacen los últimos retoques como el cambio del número de versión, cambios en la configuración para que todo apunte a los servidores de producción y algún posible bug que encontremos durante las pruebas.

Una vez que todo está configurado y probado se fusiona la rama release en la master, a la cual se añade un tag con el número de versión, y en develop para que el código de develop mantenga los bugs corregidos.

Los comandos son los siguientes:

Para la creación de la rama con git-flow

git flow release start numero_version

Su equivalente con git es:

git checkout -b release/numero_version develop

Y para finalizar la rama:

git flow release finish numero_version

Su equivalencia en git:

git checkout master
git merge --no-ff release/numero_version
git tag -a numero_version -m "Merge branch 'release/numero_version'"
git checkout develop
git merge --no-ff release/numero_version
git branch -d release/numero_version

Ramas Hotfix:

Se crean a partir de la rama master y son utilizadas para solucionar errores graves directamente desde producción. El caso en que no se hace un merge con develop de la hotfix es cuando haya creada una rama release. En ese caso el merge se realiza a master y a release.

Los comandos para git-flow son:

git flow hotfix start numero_version

Su equivalente en git:

git checkout -b hotfix/numero_version master

Para finalizar la rama con git-flow:

git flow hotfix finish numero_version

Su equivalente con git es:

git checkout master
git merge --no-ff hotfix/numero_version
git tag -a numero_version -m "Merge branch 'hotfix/numero_version'"
git checkout develop
git merge --no-ff hotfix/numero_version
git branch -d hotfix/numero_version

Espero que os haya sido de utilidad.

Publicado el 31-08-2016

Donar

Si te ha sido de ayuda y quieres hacer una donación te lo agradeceremos :)

Compartelo!


Deja un comentario

Comentanos

*

Ir arriba de la pagina