GitFlow: ¿Qué és y cómo aplicarlo sin morir en el intento?
A continuación, se presenta un una guía rápida y sencilla para utilizar GitFlow y no morir en el intento.
El flujo de trabajo con GitFlow se basa principalmente en dos ramas, la rama develop y la rama master. La rama develop es aquella rama donde convergen las ramas de desarrollo y la rama master que es nuestra rama principal o de producción, a partir de la cual van a crearse algunas ramas como por ejemplo, hotfix/my-bug-id, que se crean para solucionar errores lo antes posible, no dan espera.
¿Qué es Git?
Es uno de los sistemas de control de versiones más usado por los desarrolladores de software.
¿Qué es GitFlow?
Es un flujo de trabajo basado en Git que brinda un mayor control y organización en el proceso de integración continua.
¿Por qué implementarlo?
- Aumenta la velocidad de entrega de código terminado al equipo de pruebas.
- Disminuyen los errores humanos en la mezcla de las ramas.
- Elimina la dependencia de funcionalidades al momento de entregar código para ser puesto en producción.
- Entre otros…
¿Cuándo se recomienda implementarlo?
- El equipo de trabajo está conformado por más de dos (2) personas.
- Se emplean metodologías ágiles.
- El proyecto tiene cambios frecuentes y se requiere actualizar el ambiente de producción garantizando continuidad en la operación.
- El proyecto tiene un nivel de complejidad considerable.
- Se desea tener un proceso de soporte a errores efectivo con actualizaciones rápidas.
¿Qué se debe tener presente en todo momento?
Deben existir dos ramas principales para que el flujo de trabajo funcione correctamente:
- master
- develop
GitFlow creará por defecto los siguiente prefijos para las ramas auxiliares, los cuales ayudan a identificar y tener control en el repositorio:
- feature/
- release/
- hotfix/
- bugfix/
- support/
Se recomienda agregar un prefijo a las etiquetas, por ejemplo, la letra «v» sin comillas.
¿Cuáles son los primeros pasos?
- Crear repositorio en GitHub
- Descargar Git Bash
Una vez estamos en la consola de Git Bash, ejecutamos los siguiente comandos:
# Clonar repositorio
git clone https://github.com/my-account/my-repo-name.git .
# Crear rama develop a partir de master
git checkout -b develop master
# Listar las ramas
git branch -a
# Crear rama develop en el repositorio remoto
git push --set-upstream origin develop
# Iniciar GitFlow
git flow init
Crear una característica
Creemos la primera funcionalidad denominada create-contat-form
# Crear característica
git flow feature start create-contat-form
# Confirmar los cambios que se hayan realizado
git status
git add -A
git commit -m "Create contact-form.php"
# Finalizar característica
git flow feature finish create-contat-form
Crear una liberación
Preparamos la primera entrega para producción denominada 1.0.0
# Crear liberación
git flow release start 1.0.0
# Confirmar los cambios que se hayan realizado
git status
git add -A
git commit -m "Add release notes"
# Finalizar liberación
git flow release finish 1.0.0
# Subir cambios de la rama develop
git checkout develop
git push
# Subir cambios de la rama master
git checkout master
git push
Conclusiones
- En cada máquina y directorio donde tengamos el repositorio la primera vez se debe inicializar el flujo de trabajo con git flow init
- Una vez finalizado un release o un hotfix se deben confirmar los cambios con un git push sobre develop y master
- Se recomienda subir las etiquetas al repositorio con git push –tags para tener un control de versiones sobre la rama de master.
Imagen: freepik.es
jmt
Esa mania de hacer todo por consola cuando existen las aplicaciones que lo hacen de manera grafica.
elstr
Hola! Fijate que los nombres de las branches no coinciden en el ejemplo
# Crear característica
git flow feature start create-contat-form
# Confirmar los cambios que se hayan realizado
git status
git add -A
git commit -m «Create contact-form.php»
# Finalizar característica
git flow feature finish contact-clear-code (!!!!!!) No debería llamarse create-contat-form?
Felipe Rojas
Hemos corregido el nombre de la rama, gracias por tu aporte.