Cargando



Manejo y administración de branches en GIT

En este tutorial vamos a ver a fondo el manejo y administración de los branches, de esta forma vamos a entender cómo funcionan y podremos aprovechar sus ventajas y de esa forma sacarle todo el provecho a Git.


dic 11 2014 02:24
Profesional
Un branch en Git es una ramificación de nuestro repositorio, es una forma de generar un camino alterno al camino principal. Esto nos permite explorar nuevas soluciones sin necesidad de modificar la base del programa o aplicación que estemos llevando.

Sin embargo el concepto de branch no es muy claro cuando empezamos a utilizar esta herramienta que controla las versiones de nuestros proyectos. Usualmente en otros sistemas de control de versiones no se llevan las ramificaciones de un proyecto con este concepto.

¿Por qué utilizar branches?


Muchos ya estarán utilizando Git y no le han prestado mayor atención a los branches, y en cierto modo es comprensible ya que al manejar un solo branch y si el desarrollo lo está llevando una sola persona no debería existir inconveniente alguno.

Pero qué pasaría si esta persona quiere probar unas características experimentales que pueden causar que su proyecto falle o simplemente que afecte la estabilidad del mismo, algunos dirán que se puede hacer un fork del proyecto y continuar experimentando y si la mejora resulta exitosa se piensa luego en incorporar lo que se hizo en el fork dentro del proyecto principal. Esto realmente es un trabajo un poco extenso e innecesario.

En el caso expuesto simplemente con crear un nuevo branch dentro del proyecto en cuestión podemos hacer todos los cambios y experimentaciones deseadas y al finalizar simplemente con hacer un merge o fusión con el branch inicial o principal ya habremos unido todos nuestros cambios.

Otro caso
Otro caso es cuando tenemos un equipo de trabajo donde a partir de dos personas trabajando sobre el mismo código puede generar conflictos, aquí es donde Git saca a relucir su poder. Podemos crear una estructura de tres branches por ejemplo, un branch por cada desarrollador y un branch de unificación. De esta manera cada desarrollador puede llevar sus cambios y al momento en que sienta que los puede aportar al proyecto los envía al branch de unificación y así la otra persona o los otros miembros del equipo pueden acceder a ellos.


Nombrando los branches


Ya entendemos las razones que nos llevan a utilizar branches y estamos familiarizados con el concepto, ahora vamos a ver una parte que es vital para el uso de esta característica de Git y es colocarle un nombre a nuestro branch.

Nombre del branch
A través del nombre es que sabremos donde estamos parados en el momento, este nombre es totalmente arbitrario, es decir, cada usuario de Git puede nombrar sus branches como desee dentro de su proyecto. Normalmente Git crea un branch llamado master por defecto y este generalmente es el que contiene la versión estable y libre de bugs del proyecto, sin embargo podemos renombrarlo o hasta eliminarlo si nos parece, aunque es recomendable no hacerlo.


Gracias a que podemos utilizar comodines de búsqueda, podemos nombrar nuestros branches de forma jerárquica, por ejemplo, Imp_Bug/89 o Impl_Bug/23. Esto hace que podamos ubicarlos y organizarlos con temas. Veamos como llevamos lo explicado a nuestro repositorio de pruebas:

En este caso tenemos un branch master y hemos creado varios branches que son de resolución de bugs, si ejecutamos el comando git branch en la consola de Git dentro de la carpeta de nuestro proyecto obtendremos un listado con todos los branches existentes, veamos como luce cuando lo ejecutamos:

branches-git.jpg


Vemos entonces el listado de todos nuestros branches y en un color diferente vemos el branch en el cual estamos en ese justo momento. Pero qué pasa si tenemos una gran cantidad de branches y necesitamos filtrar solo los branches de resolución de bugs, pues ahí entra en juego la búsqueda por comodines. Por ejemplo si queremos buscar de esta forma debemos hacer un comando similar al siguiente:

git show-branch impl_bug/*

Veamos como luce esto en nuestra consola:

branches-git2.jpg


Podemos notar entonces que se nos muestran todos los branches y a un lado tenemos el comentario del último commit que fue hecho en ellos.

Mejores prácticas al colocar nombres de branches


Debido a que la colocación de nombres de branch es algo totalmente arbitrario y a juicio del usuario, muchas veces se llega a confusiones dentro de un equipo, es por ello que podemos seguir algunas recomendaciones y mejores prácticas, de esta forma seremos mejores usuarios dentro de la herramienta:
  • A pesar que podemos utilizar el símbolo / en el nombre de nuestros branches, este no puede ser el carácter final de un nombre.
  • No podemos colocar un punto (.) luego de un slash (/).
  • No podemos colocar dos puntos seguidos (..) dentro de un nombre.
  • No debemos utilizar los caracteres especiales (~ ^ : ? * [ ) ya que estos caracteres tienen un significado dentro de la sintaxis de Git y se pueden prestar a errores.
  • Tampoco debemos tener espacios en blanco o caracteres de control ASCII.
Si seguimos estas pautas mantendremos un uso adecuado dentro de nuestro repositorio además que los demás miembros del equipo nos agradecerán hacerle la vida más sencilla.

El checkout


Si tenemos un listado de branches y estamos en un branch pero queremos pasar a otro, simplemente debemos utilizar el siguiente comando:

git checkout nombre-del-branch

Con ello cambiaremos de branch inmediatamente, pudiendo de esta forma trabajar en varias secciones del proyecto sin problemas. Veamos cómo podemos cambiar de branch dentro de nuestro repositorio de pruebas:

branches-git3.jpg


Como notamos es algo bastante sencillo, sin embargo si hacemos algún cambio dentro de este branch y no le hacemos commit al intentar cambiar a otro obtendremos un error y Git nos anuncia que debemos hacer algo ya que si no los cambios pueden perderse:

branches-git4.jpg


Cuando este problema sucede debemos hacer un commit y luego al pasar al siguiente branch veremos el contenido del otro branch.

Crear un nuevo branch


Para crear un nuevo branch vamos a seguir utilizando el comando checkout, sin embargo en este caso debemos agregar la opción -b, con ello haremos una copia del branch actual y generaremos uno totalmente nuevo. Veamos como luce en nuestra consola:

branches-git5.jpg


Notamos como una vez creado el nuevo branch inmediatamente Git nos lleva a él y podremos empezar a trabajar directamente.

Borrar un branch


Aunque no es muy común, hay casos en los que deseamos borrar un branch de nuestro repositorio y Git nos permite hacerlo, solo que no podemos borrar el branch en el cual estamos en el momento, para evitar inconsistencias con la herramienta. Para realizar esta operación es tan fácil como aplicar el siguiente comando:

git branch -d nombre-del-branch

Restricciones
Sin embargo existen algunas restricciones, por ejemplo no podemos eliminar un branch que tiene commits que el branch desde donde estamos intentando borrar no tiene, con ello Git ayuda a evitar la pérdida de información, si queremos borrar un branch de estas características, debemos hacer merge en nuestro branch o ir a alguno que si tenga esos commits.


Veamos como luce en la consola la ejecución de este comando:

branches-git6.jpg


Al finalizar su ejecución vemos como Git nos confirma la eliminación del branch correspondiente.

Resolución de conflictos


Hay veces en las cuales hemos tocado la misma línea en un archivo en dos branches diferentes, esto al momento de hacer merge nos va a generar un conflicto. Git nos ayuda estableciendo una diferenciación del conflicto dentro del archivo, por lo que al resolverlo debemos hacer un nuevo commit y un nuevo merge. La diferenciación es mostrada de la siguiente forma en el archivo en cuestión:

una linea cualquiera
<<<<<<< master:NuevoCambio
una nueva linea
=======
la linea anterior
>>>>>>> dev:NuevoCambio

Si deseamos resolver el conflicto hay que eliminar el contenido de Git, es decir, las líneas con <<<<< y >>>>, así dejamos el cambio que deseamos o unificamos todo, al hacer esto ya Git no nos presentará más el error y podremos hacer el merge normalmente.

Importante
Una de las cosas que es importante hacer es generar una nomenclatura compartida, es decir, establecer una estructura de nombres bajo los cuales se deben crear los branches según su función dentro del proyecto, de esa forma tendremos mucho más orden, por supuesto esta nomenclatura debe seguir las mejores prácticas mencionadas al inicio del tutorial.


Con esto finalizamos este tutorial, ya podremos sacar mucho más provecho de nuestro repositorio en Git y con ello administrar de gran forma nuestro equipo. Ya debemos tener cubierta la base para el manejo de branches en Git, con ello podremos hacer una administración adecuada de nuestros cambios de forma que podamos mantener al mínimo los conflictos, sobre todo cuando trabajamos en equipos de dos o más personas.

¿Te ayudó este Tutorial?


Sin comentarios, sé el primero!

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X