Git Flow con Git
Anuncio:
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:
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:
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.