git

Git es una herramienta opensource que nos permite gestionar correctamente los cambios sobre nuestros proyectos de desarrollo. Con GIT puedes saber exactamente quien hizo algun cambio, cuando se hizo ese cambio, asi como revertir cambios no deseados.

Unido a otras herramientas como Jeekins, te permite automatizar testing, validaciones y hasta el deployment de tu proyecto.

Como instalar GIT FLOW ?

GIT Flow es una herramienta que te permite crear un flujo de trabajo predefinido para tus proyectos. Es decir, crea un orden en la forma de hacer las cosas con GIT.

A continuación vamos a revisar las diferentes formas de instalacion en los diferentes sistemas operativos. Spoiler Alert, Windows sera el mas complicado.

Instalar GIT Flow en Linux

apt install git-flow

Instalar GIT Flow en Mac

brew install git-flow

Instalar GIT Flow en Windows

Aca es cuando la cosa ya no es como lo pintan en la tele 🙁

  • Una vez ahi seleccionamos el instalable ( EXE ) que corresponda a nuestra arquitectura. Spoiler Alert ( probablemente sea 64-bit )
  • Nos pedira aceptar la licencia del programa, en este caso GPL. Obviamente aceptamos
  • Nos pide seleccionar la carpeta de instalación. Dejamos opciones por defecto.
  • Nos pide seleccionar que componentens instalar. Aseguremonos que la opcion de Git Bash este marcada
  • Nos pide seleccionar el nombre del menu de Inicio. Dejamos valor por defecto.
  • Nos pide seleccionar el editor que usara GIT ( Git requiere usar un editor de texto cuando trabaja, yo personalmente uso nano … pero cualquier opcion es valida )
  • Nos pide seleccionar la variable PATH.

Estas 3 opciones significan:

  • Use Git from Git Bash only
    Quiere decir que solo podras usar los comandos de Git desde un aplicativo especial que ya viene instalado. Esta opcion es más que suficiente para el 90% de los casos
  • Git from the commando line and also from 3rd party software
    Si necesitas usar GIT con otros aplicativos en tu PC, pues esta opcion es la mas conveniente.
  • Use GIT and optional Unix tools from the Command Prompt
    Esta opcion te instala ciertos comandos de Windows en tu Linux, lo malo es que “sobreescribe” esos comandos que ya tenias en windows. NO lo uses sino estas seguro.

  • Nos pide seleccionar el cliente SSH. Por defecto usamos OpenSSH
  • Nos pide definir como sera el SALTO DE LINEA.

Cuando tu presionas ENTER en tu editor de texto en Windows se imprimen los caracteres ocultos \n\r

En cambio en Linux, solo se imprime el caracter \n

  • Nos pide que emulador de terminal usaremos. Seleccionamos MinTTY por defecto.
  • Y listo, instalación finalizada

GIT y GIT Flow

Al trabajar con cualquier tipo de proyecto de software tenemos que resolver problemas como el guardar un backup de tu codigo, asi evitamos que una falla en disco eche a perder nuestro trabajo. Pero que sucede si en el proyecto de software que estamos trabajando llegamos a un callejon sin salida y tenemos que probar una solucion nueva ? Entonces, tendriamos que guardar muchos backups para poder volver a una version anterior. Y que sucede si creamos una copia del proyecto para una funcionalidad experimental como hacemos para integrar esas funcionalidades con la version de produccion ( sobre todo si ha seguido trabajando en paralelo en la version de produccion ). Como gestionamos que varias personas trabajen cada uno sobre una funcionalidad diferente y al final de cada una juntarlas para que funcionen adecuadamente ? Y si al momento de trabajar sobre una caracteristica nueva descubrimos algun problema en la version de produccion ? como volvemos a esa version antigua ? Y si usamos un codigo de backup como integramos esos cambios para no perderlos en la nueva funcionalidad ? Debemos volver a escribirlos ?

Para solucionar todos esos problemas ( y algunos mas ) existe GIT. Git es un sistema de control de versiones de codigo. Que nos permite volver a cualquier version del sistema.

Sin embargo, GIT es muy flexible permitiendonos trabajar en la forma que querramos. Tanta flexibilidad no es muy buena para proyectos y equipos grandes o desarrolladores novatos. Incluso para desarrolladores senior, el desorden puede causar problemas en el proyecto.

GIT FLOW es un flujo de trabajo ( recomendaciones a seguir ) para proyectos en GIT que nos permite usar herramientas simples para automatizar y organizar el trabajo usando GIT.

GIT FLOW nos indica que en todo proyecto debe existir una rama master que sera la encargada de contener el codigo de produccion y una rama develop que mantendra el codigo de desarrollo. Asi como algunas ramas auxiliares: feature, para las nuevas caracteristicas o funcionalidades del sistema, release, para preparar los cambios antes de pasarlos a produccion, y hotfix, para corregir rapidamente los bugs que se pudieran encontran en produccion.

Al iniciar un proyecto con GIT FLOW debemos iniciar la configuracion con el comando

git flow init -d

Este comando no realizara ningun cambio en tu codigo o ramas de GIT. Solo servira para configurar incialmente el proyecto.

Al ejecutar el comando, se crearan ( sino existen previamente ) las ramas master y develop. Las cuales seran usadas para contener el codigo del proyecto en produccion y el codigo del proyecto en desarrollo respectivamente.

Luego, cualquier nueva funcionalidad ( historia de usuario, caso de uso, tarea ) que queramos implementar crearemos una rama con el comando

git flow feature start <nombre de la historia>

En ese momento GIT FLOW, creara una copia del codigo de la rama develop y lo pondra en una rama feature/<nombre de la historia> donde se podra realizar los cambios necesarios. Si al final la caracteristica es desechada ( ya sea porque el codigo no funciono como se esperaba, o se prefiero no desarrollar al final esa historia ) podra eliminarse simplemente borrando la rama sin comprometer el resto del codigo

git branch -d <nombre de la historia>

Una vez termina la historia, para integrarla al resto del codigo simplemente debemos cerrar el feature.

git flow feature finish <nombre de la historia>

Al ejecutar este codigo, GIT FLOW hara un merge de la rama feature con el codigo que esta en develop y luego procedera a borrar la rama feature. En este punto si empiezas a trabajar con otra historia, al crear el feature usara el nuevo codigo en develop.

Al final del sprint cuando ya necesitar pasar todo el codigo funcionando a produccion, deberemos crear una rama release. Donde nos aseguraremos que todo este funcionando correctamente y podremos hacer los ultimos ajustes

git flow release start <version codigo>

Aca podremos hacer cambios, guardarlos en git con nuevos commits y cuando ya este todo listo indicarle a GIT FLOW que debe pasarlo ahora si a produccion.

git flow release finish <version codigo>

En este punto GIT FLOW, integra los cambios de la rama release a develop ( para que los nuevos desarrollos tengan esos ajustes ) y a master ( para hacer el pase a produccion ) y luego borra la rama release

Si en cualquier momento se detecta un bug en produccion ( puedes estar trabajando en otro feature o inclusive estar haciendo los ajustes para un release ) puedes crear una rama hotfix para hacer cambios sobre el codigo que esta actualmente en produccion.

git flow hotfix start <version codigo – numero correccion>

Una vez terminados los cambios se cierra la rama hotfix

git flow hotfix finish  <version codigo – numero correccion>

Ahi los cambios hechos en el hotfix, se copian a master para actualizar produccion y a develop para tenerlos disponibles para el desarrollo posterior.

PD: GIT FLOW es una herramienta agnostica, lo puedes usar tanto en github, en gitlab, o en tus propios repositorios de GIT.

PD2: si usas tus propios repositorios de GIT y aun no has visto el tema de permisos y seguridad, te recomiendo gitolite.