Mundo GitFlow: Usando Git Flow – Parte 3

Es hora de utilizar esta extensión para poder sacarle mayor provecho a todos nuestros desarrollos (y demás proyectos que quieran versionar con Git), después de haber instalado y configurado la extensión (Puedes volver en el tiempo a través de este link para ver cómo hacerlo: Instalación).

Paso 1 – Inicializar repositorio

A menos que ya tengas un repositorio inicializado, es importante crear un repositorio Git para trabajar en el proyecto deseado. Ubícate en la carpeta donde se encuentre tu proyecto (o futuro proyecto) y hacemos:

$ git init

Esto nos permitirá inicializar el repositorio en Git.

Paso 2 – Inicializar Git-Flow

Ya que tenemos nuestro repositorio creado, aplicaremos el siguiente comando para inicializar la extensión Git-Flow:

$ git flow init

Esto activará un asistente de configuración en el terminal preguntando por el nombre de las ramas a usar en git-flow. Las siguientes ramas son las que utiliza gitflow para trabajar:

  • master: Es la rama principal.
  • develop: Es la rama principal de desarrollo.
  • feature/: Rama para crear una nueva funcionalidad o característica.
  • release/: Puedes considerarlo como una etapa “Pre-Producción”
  • hotfix/: Es usada para atender casos de emergencia que ocurran en producción (master).
  • support/: Para realizar un soporte.

En este punto puedes optar por cambiar el nombre de las ramas o dejarlo simplemente como está y presionar ‘Enter’. Al final, preguntará por el prefijo para las versiones (porque es importante colocar tags del número de versión al desarrollo). Yo, por lo general, uso la letra ‘v’ como prefijo. Esto permitirá crear una rama release llamada ‘v0.1’, por mencionar un ejemplo.

Es hora de desarrollar

Para empezar, es importante saber qué es lo que se hará en el proyecto. Optamos por crear una nueva funcionalidad, así que aplicamos el siguiente comando para crear una nueva rama ‘feature/’ llamada ‘funcionalidad-cool’:

$ git flow feature start  funcionalidad-cool

Esto arrojará en el sistema el siguiente mensaje:

Switched to a new branch ‘feature/funcionalidad-cool’

Summary of actions:
– A new branch ‘feature/funcionalidad-cool’ was created, based on ‘develop’
– You are now on branch ‘feature/funcionalidad-cool’

Now, start committing on your feature. When done, use:

git flow feature finish funcionalidad-cool

Como podemos apreciar, el sistema crea la rama llamada ‘feature/funcionalidad-cool’ y de una vez nos cambia a esa rama para trabajar. Esta rama se crea a partir de desarrollo, lo que nos hace recordar una regla importante en git-flow: No se debe trabajar directamente en la rama de desarrollo. Para ello se crea una nueva funcionalidad y, al finalizar la misma, se une con la rama de desarrollo.

Finalizamos la funcionalidad

Terminamos de aplicar los cambios y de agregar los archivos necesarios de nuestra funcionalidad-cool. Lo que debemos hacer ahora es finalizar el ‘feature’ para mandar este progreso a la rama de desarrollo:

$ git flow feature finish funcionalidad-cool

La estructura del comando es muy sencilla:

  • git flow: Usada para trabajar con la extensión
  • feature: Usada para decirle al sistema que trabajaremos con las ramas tipo ‘feature/’.
  • finish: Indica que deseamos finalizar la funcionalidad.
  • funcionalidad-cool: Es el nombre de la rama con la que estamos trabajando.

El sistema nos arrojará el siguiente mensaje:

Switched to branch ‘develop’
Updating d301181..23b151f
Fast-forward
funcionalidad-cool.txt | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 funcionalidad-cool.txt
Deleted branch feature/funcionalidad-cool (was 23b151f).

Summary of actions:
– The feature branch ‘feature/funcionalidad-cool’ was merged into ‘develop’
– Feature branch ‘feature/funcionalidad-cool’ has been locally deleted
– You are now on branch ‘develop’

El sistema nos indica que se cambió a la rama de desarrollo. Luego nos menciona que ha actualizado los commits necesarios de la rama ‘feature/funcionalidad-cool’ a la rama ‘develop’. Indica los cambios realizados en la rama y luego nos indica que la rama ‘feature\funcionalidad-cool’ fue eliminada.

De esa forma se pueden desarrollar nuevas funcionalidades para luego integrarlas a la rama de desarrollo.

Creando un release (pre-producción)

Teniendo todo listo en Desarrollo, creamos una rama release con la nueva versión del proyecto utilizando el siguiente comando en la terminal:

$ git flow release start 0.1

Se puede apreciar que la estructura del comando es muy similar a la estructura utilizada para las funcionalidades (features). El  ‘0.1’ es el nombre que decidí darle a la rama, porque en este ejemplo estamos creando un nuevo release de la versión 0.1. La respuesta del sistema ante el comando sería el siguiente:

Switched to a new branch ‘release/0.1’

Summary of actions:
– A new branch ‘release/0.1’ was created, based on ‘develop’
– You are now on branch ‘release/0.1’

Follow-up actions:
– Bump the version number now!
– Start committing last-minute fixes in preparing your release
– When done, run:

git flow release finish ‘0.1’

Esto sirve para revisar muy a fondo el proyecto, asegurando que no se escapen fallas o bugs que puedan caer en producción. Una vez realizada la revisión y otorgado los commits necesarios para el sistema, procedemos a finalizar el release utilizando el siguiente comando:

$ git flow release finish ‘0.1’

El sistema te pedirá que agregues 3 mensajes para los 3 commits correspondientes necesarios:

  1. El primer mensaje de commit será para el ‘merge’ de la rama release a la rama ‘master’ que es producción.
  2. El segundo mensaje de commit es para el ‘merge’ de la rama release a la rama de desarrollo ‘develop’.
  3. El tercer mensaje de commit (en el cual aparece el ‘v0.1’) elimina la rama release ‘0.1’ y se coloca un tag del release ‘v0.1’ al master.

Notamos que aparece la letra ‘v’ antes del número de versión. Esto se debe a que en este ejemplo se decidió otorgar el prefijo ‘v’ al momento de inicializar el git flow.

¿Y si hay que corregir algo en producción?

Se crea una rama hotfix con tal de atender esa incidencia. Esta rama se inicia a partir de producción y, una vez que se hacen las correcciones y commits necesarios, se incluye nuevamente en la rama  ‘master’ y la rama ‘develop’. Para crear una rama HotFix, aplicamos el siguiente comando en la terminal:

$ git flow hotfix start 0.2

Aquí usamos el ‘0.2’ como nombre de la rama hotfix. Es necesario usar un número de versión porque esto caerá directamente a la rama ‘master’ y se le aplicará un tag así como sucede con el flujo de las ramas releases.

Para finalizar, usamos el siguiente comando después de haber realizado las correcciones:

$ git flow hotfix finish ‘0.2’

El sistema (tal como sucede con las ramas releases) te pedirá que agregues 3 mensajes para los 3 commits correspondientes necesarios:

  1. El primer mensaje de commit será para el ‘merge’ de la rama hotfix a la rama ‘master’ que es producción.
  2. El segundo mensaje de commit es para el ‘merge’ de la rama hotfix a la rama de desarrollo ‘develop’.
  3. El tercer mensaje de commit (en el cual aparece el ‘v0.2’) elimina la rama hotfix ‘0.1’ y se coloca un tag del release ‘v0.2’ al master.

Con esto podemos realizar las operaciones básicas utilizando la extensión git flow.

Para los que no quieren ver una terminal

Existen herramientas gráficas para el control de versiones con Git y que soportan la extensión git flow:

SourceTree

hero-mac-screenshot

Es una herramienta otorgada por Attlasian y es muy utilizada para control de versiones con Git y Mercurial. También soporta la extensión git flow, permitiendo realizar las operaciones con el flujo sin tener que aplicar líneas de comando. Actualmente sólo está disponible para Windows y Mac OS.

GitKraken

Esta herramienta desarrollada por Axosoft tiene una interfaz muy agradable y posee integración con Github, Gitlab y otros servicios. Actualmente la herramienta está disponible para Windows, Linux y Mac OS.

Ahora, a practicar y llevar un mejor control de los repositorios Git!

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s