Usando Git Flow

Como vimos en el artículo anterior (que es recomendable leer para entender correctamente este), podemos hacer uso de flujos de trabajo bastante completos y potentes con Git.

El problema es que la necesidad de ejecutar una serie de comandos cada vez que se quiere hacer una tarea cotidiana (integrar una rama de feature, lanzar una versión, ...) es muy dada a errores, ya que con que nos equivoquemos en alguno de ellos, o los ejecutemos con algún parámetro inadecuado nuestro repositorio puede dejar de funcionar tal como lo queremos.

Por ello, el creador del flujo de trabajo visto en el anterior artículo creo una herramienta llamada git-flow, que añade una capa por encima de git, facilitando todas las tareas descritas anteriormente.

Instalando git-flow

Esto es dependiente de la plataforma que estemos usando. Por ejemplo, si usamos Linux bastará con ejecutar el siguiente comando, que descargará un script de instalación y lo ejecutará:

$ wget --no-check-certificate -q -O - https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | sudo bash

En el caso de usar MacOS, podemos instalarlo gracias a homebrew:

$ brew install git-flow

Una vez instalado no necesitaremos nada más, y podremos empezar a usarlo en nuestros nuevos repositorios (o en los ya existentes).

Usando git-flow

Como hemos dicho anteriormente git-flow no es más que una capa que se pone por encima de git, por lo que para usarlo, pasaremos el parámetro flow al comando git y a continuación indicaremos la operación que queremos realizar.

Si queremos ver todas las opciones posibles solo tenemos que pasar como parámetro help.

$ git flow help
usage: git flow <subcommand>

Available subcommands are:
   init      Initialize a new git repo.
   feature   Manage your feature branches.
   release   Manage your release branches.
   hotfix    Manage your hotfix branches.
   support   Manage your support branches.
   version   Shows version information.

Como podemos ver, la forma de usarlo es bastante sencilla, pero vamos a verla más en detalle.

Inicializando el repositorio

La primera orden que debemos realizar con git-flow antes de comenzar a usar el resto de las opciones es inicializar el repositorio. Este comando creará la rama develop, y configurará el prefijo que queremos que tengan los distintos tipos de ramas temáticas.

$ git flow init

Tras una serie de preguntas (que podemos dejar vacías para que se usen las opciones predeterminadas), nuestro repositorio quedará inicializado correctamente, y nos dejará puesto como HEAD la rama develop.

Desarrollando en ramas

Si llegado cierto punto queremos crear una rama de features para desarrollar cierta característica en particular, no tendremos más que crear la rama.

$ git flow feature start bug-144

Con el anterior comando git-flow creará una rama llamada feature/bug-144 y posicionará nuestro HEAD en ella. A continuación, no tendremos más que desarrollar y realizar commits de forma normal y corriente.

Llegado el momento de integrar el trabajo (con la rama develop, recordad) bastará con ejecutar el siguiente comando:

$ git flow feature finish bug-144

De esta manera, git-flow se encargará de integrar la rama en develop, borrar la rama bug-144 y por último situar nuestro HEAD de nuevo en la rama develop.

Este es el flujo normal con este tipo de ramas, pero como dijimos en el artículo anterior, podríamos querer que nuestra rama bug-144 fuese subida al repositorio central para que varios desarrolladores pudiesen trabajar en ella. Para ello, bastará con pasarle como parámetro la opción publish.

$ git flow feature publish bug-144

De esta manera se subirá a origin la rama bug-144. Para que cualquier otro desarrollador pueda bajarse esa rama habrá que hacer algo análogo, usando la opción track.

$ git flow feature track bug-144

Llegado a este punto ambos desarrolladores podrán realizar cambios y commits sobre la misma rama de desarrollo. Ya solo queda poder bajarse de forma regular los cambios subidos por la otra persona. Tarea que se realizará mediante un pull.

$ git flow feature pull origin bug-144

Mediante este último comando le indicamos a git-flow que se descargue todos los cambios realizados en el repositorio origin para la rama bug-144. Este último parámetro no es obligatorio, bajándose los cambios de todas las ramas en caso de no ponerlo.

Por último, y si vemos la ayuda (git flow feature help), podremos ver como existen un par de opciones más que poder realizar, pero debido a su sencillez, se dejan a la curiosidad del lector :)

¿Y el resto de ramas?

Pues el resto de ramas (las de releases y hotfix) funcionan de forma totalmente análoga a lo explicado en el anterior apartado.

$ git flow hotfix start
$ git flow release finish v2.2
...

Ambos tienen los mismos subcomandos (alguno menos en realidad), pero los principales (start, finish y publish) funcionan de igual manera a lo explicado anteriormente.

Concluyendo...

Y en conclusión no hay mucho más que contar. En esta serie de dos artículos hemos podido ver la potencia que tiene Git, la libertad que nos brinda a la hora de elegir como trabajar, y el jugo que le podemos sacar usándolo correctamente.

La mayor ventaja de git-flow sobre otros modelos de trabajo es que nos obliga a ser organizados en la forma en la que tratamos nuestro repositorio, creando un flujo de trabajo que se adapta muy bien a la mayor parte de los desarrollos.

Y esto es todo,

$ git push sysvar usando-git-flow