GitFlow

Hace unos días publiqué una entrada sobre “una buena manera de afrontar la ramificación utilizando Git. Un comentario del blog de Jorge Jiménez (@jorgejiro) me recordó git-flow y ahora voy a intentar realizar una pequeña introducción a este hack.

¿Qué es git-flow?

Es una colección de extensiones para Git que proveen e unas serie de operaciones de alto nivel para utilizar un repositorio Git de manera más fácil.

Para entender mejor como empezar con git-flow lo mejor he encontrado este post http://jeffkreeftmeijer.com/2010/why-arent-you-using-git-flow/ (INGLÉS). Intentaré traducirlo:

Instalando git-flow

MAC

> brew install git-flow

Linux

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

WindowS

No utiliza windows, pero hay una documentación bastante interesante en https://github.com/nvie/gitflow/wiki/Windows

Después de instalar git-flow

Después de instalar git-flow, puedes crear un nuevo repositorio en el directorio donde te encuentras, o puedes convertir un repositorio existente en una nueva rama. Para ello

>git flow init

Ahora seguro que tienes un puñado de preguntas, pero probablemente aceptes los valores por defecto:

No existen ramas todavía. Hora deben crearse las ramas base.
El nombre de la rama para lanzamientos (releases) de producción: [master]
El nombre de la rama para “Nueva reléase en desarrollo”: [develop]
¿Qué nombre tienen las ramas de soporte?
Rama de Feature? [feature/]
Rama de lanzamiento (release)? [release/]
Rama de Hotfix? [hotfix/]
Rama de soporte? [support/]
 Etiqueta de prefijo? []

Después de que hayas respondido a estas preguntas, git-flow establece automáticamente como rama por defecto develop (o como la hayas llamado).

Ahora simplemente usa Git como quieras, pero recuerda trabajar solo con pequeños features en la rama develop. Si necesitas crear una gran featuras, crea una nueva rama basada en develop. Digamos que quieres añadir una página para realizar el login.

>git flow feature star login

Este comando creará una nueva rama llamada feature/login, basada en nuestra rama develop y cambiará a esta nueva rama que acabamos de crear. Puedes realizar sobre esta rama los “commits” que quieras y cuando termines el trabajo, simplemente tienes que decir que la feature está terminada.

>git flow feature finish login

Esto realizará un “merge” de feature/login a develop y borrará la rama de la feature.

Cuando tengamos completa toda la feature simplemente podemos empezar una rama release (basada en develop). Para poder lanzar la release es importante no olvidarse del numero de versión de la release.

> git flow ewlwase star v0.1.0

Cuando toda la release este terminada, con los bugs solucionados etc. deberemos “subir a producción los cambios” Así que es necesario que hagamos un merge con los cambios de develop a master. No hay que olvidarse de volver a la rama develop después de subir los cambios

Las cosas que podemos hacer con git-flow son asombrosas, es muy fácil manejar hotfixes. Es posible empezar y finalizar ramas hotfix basadas en master , de esta manera es posible resolver bugs que afecten a la rama en producción de una manera fácil.

Instalación en Windows MSysGit

Descargar he instalar getopt.exe del paquete util-linux en C:\Program Files\Git\bin (Solo es necesario getopt.exe, los demás archivos de útil-linux no se utilizan) también es necesario descargar el mismo directorio una dependencia libintl3.dll.

Clonamos el repositorio de git-flow desde GitHub

> Git clone –recursive git://githu b.com/nvie/gitflow.git            
>cd gitflow

Ahora solo debemos ejecutar el script msysgit-install desde el prompt (cmd.exe) *Es necesario tener “privilegios de administrador” para poder ejecutar el script.

C:\gitflow> contrib\msysgit-install.cmd

Ahora debemos crear un enlace para poder utilizar “>git flow” en cualquier lugar

> ln -s /C/gitflow/git-flow git-flow

GitHub para Windows

GitHib para Windows utiliza una instalación portable de MSysGit para la Shell. Necesitaremos seguir las instrucciones para MSysGit, excepto por 2 diferencias, ambas relacionadas con la localización de la instalación de Git-flow. Para encontrar la localización:

Navega hasta el directorio de GitHub. En Windows 7 está en «C:\Users\USER_NAME\AppData\Local\GitHub». Buscaremos un directorio con un nombre similar a «PortableGit_8810fd5c2c79c73adcc73fd0825f3b32fdb816e7».

Una vez que este e este directorio, tan solo debemos seguir las instrucciones de MSysGet:

Copiaremos getopt.exe y libintl3.dll al directorio bin que esta debajo de donde te encuentras. En Windows 7 deberíamos copiar los archivos a “C:\Users\USER_NAME\AppData\Local\GitHub\PortableGit_8810fd5c2c79c73adcc73fd0825f3b32fdb816e7\bin”.

Abrir la Shell para Windows de GitHub y chequearemos que estamos en el directorio raíz de GitHub, por ejemplo C:\GitHub clonamos GitFlow aen la carpeta con el siguiente comando.

C:\GitHub> git clone --recursive git://github.com/nvie/gitflow.git

Ahora obtendremos una copia del código de gitflow en nuestra carpeta e GitHub.

Cambiamos al directorio GitFlow así:

C:\GitHub> cd gitflow

Ejecutamos msysgit-install poniendo como parámetro la localización. Por Ejemplo:

C:\GitHub\gitflow [develop]> contrib\msysgit-install.cmd «C:\Users\USER_NAME\AppData\Local\GitHub\PortableGit_8810fd5c2c79c73adcc73fd0825f3b32fdb816e7»

*Reemplazar PortableGit_8810fd5c2c79c73adcc73fd0825f3b32fdb816e7 con el nombre de tu directorio, no es necesario poner /bin al final

Por último solo queda chequear si GitFlow se ha instalado:

C:\GitHub> git flow help

Instrucciones

Estas instrucciones son una traducción del repositorio de github https://github.com/nvie/gitflow

Inicialización

Para crear un nuevo repositorio con la estructura básica usamos:

git flow init [-d]

Con esto deberemos responder a una serie de preguntas. Si deseamos los valores por defecto solo tenemos que usar la etiqueta –d

Crear una rama feature/release/hotfix/support

  • Para listar/comenzar/finalizar ramas de feature utilizamos:

git flow feature

git flow feature start []

gitflowfeaturefinish

El argumento base para rama feature debe ser un commit en develop

  • Push/pull una rama de feature en un repositorio remoto utilizamos:
git flow feature publish <name> git flow feature pull <remote> <name>
  • Para listar/comenzar/finalizar ramas de release utilizamos:
git flow release git flow release start <release> [<base>] git flow release finish <release>

El argumento <base> debe ser un commit sobre develop

  • Para listar/empezar/finalizar ramas hotfix usamos
git flow hotfix git flow hotfix start <release> [<base>] git flow hotfix finish <release>

El argumento <base> debe ser un commit sobre master

  • Para listar/empezar ramas de soporte
git flow support git flow support start <release> <base>

El argumento <base> debe ser un commit sobre master

5 respuestas a «Git-flow primeros pasos»

  1. Avatar de Una buena manera de afrontar la ramificación (branching) en Git | Jesus L.C.

    […] He realizado una segunda parte de este post traduciendo git-flow, este hack para utilizar esta estratégia de ramificación (rama por tarea) de una forma más cómoda. Aqí os lo dejo:  https://jesuslc.com/2013/01/04/git-flow-primeros-pasos/ […]

    Me gusta

  2. Avatar de Jose Alberto

    Muchas gracias por compartirlo. La verdad es que tiene buena pinta. A ver si pronto arrancamos con Git y podemos utilizarlo.

    Me gusta

  3. Avatar de Razis
    Razis

    Si quieres una sugerencia útil para una herramienta de traducción que trabaja con po, resx, cuerdas y así sucesivamente, https://poeditor.com sería mi elección. Cuenta con una interfaz sencilla con un diseño colaborativo de proyectos y muchas otras posibilidades. También se conecta con sus proyectos github para obtener sus archivos desde los repositorios.

    Me gusta

  4. Avatar de Sancando partido a PHPStorm – Jesús L.C.

    […] hemos hablado de git-flow y para PHPStorm exiten un plugin que hace que nos podamos olvidar del terminal, este plugin […]

    Me gusta

  5. Avatar de Sacando partido a PHPStorm – Jesús L.C.

    […] hemos hablado de git-flow y para PHPStorm exiten un plugin que hace que nos podamos olvidar del terminal, este plugin […]

    Me gusta

Replica a Jose Alberto Cancelar la respuesta

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.

Jesús López

Soy un Ingeniero en Informática y apasionado de la programación. Me gusta disfrutar de mi familia, viajar y perdernos paseando.  Me mola programar, hacer tests y refactorizar código . Practico Test Driven Development (TDD) y me lo paso bien con el legacy codeLeer más

Sígueme en: