Git, Github y Github Desktop, cómo usar Git de la manera más sencilla, paso a paso

Hace unos días publicamos un artículo en el que discutimos acerca de las ventajas de usar el control de versiones en todos tus proyectos, incluidos los de hardware:

Ventajas de usar control de versiones en tus proyectos de hardware
Por qué utilizar control de versiones, Git, gihub, bitbucket gitlab en tus proyectos de hardware físico, ventajas y usos.

Y no hace tanto, incluimos Github Desktop como uno de nuestros programas imprescindibles para tu laboratorio de Arduino y Raspberry:

Programas y software gratis imprescindible para proyectos de Arduino y Raspberry Pi
Comentaremos los programas gratis e imprescindibles para tus proyectos de Arduino, Raspberry Pi, programación o electrónica: KiCad, LTSpice, VS Code, Github desktop

En conclusión, he pensado que lo lógico es crear un tutorial paso a paso en el que combinamos Github y Github Desktop para demostrar las ventajas de las que presumimos en nuestros dos artículos anteriores, así que, ¡vamos a ello!

Ver en Github

¡Recuerda que puedes consultar el repositorio de Ardumaster!

Conceptos básicos

Debemos empezar diferenciando entre Git, Github y Github Desktop, o nos haremos un lío en un santiamén:

  • Git es un sistema de control de versiones, es la base sobre la que los otros dos componentes trabajan y la que usaremos de forma indirecta.
  • Github es una empresa y página web que nos permite alojar nuestros repositorios en línea, como si se tratase de un servicio de almacenamiento en línea como Google Drive, OneDrive o Dropbox .
  • Github Desktop es un cliente, una interfaz gráfica, que usa Git para que trabajar con Git sea más intuitivo y sencillo. Está desarrollada por Github, pero no es necesario utilizar sus servicios, aunque en es te tutorial así lo haremos.

Prerrequisitos

Antes de ponernos manos a la obra, será necesario crear un acuenta en Github e instalar Github desktop:

Crear cuenta en Github

Crear una cuenta en Github es sencillo, basta con navegar hasta su página web oficial:

GitHub: Let’s build from here
GitHub is where over 100 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and fea…
Página web oficial de Github.

Y crear una cuenta nueva. La cuenta que crees será la misma que usemos para iniciar sesión en Github Desktop para conectar el programa con Github.

Instalar Github desktop

Para instalar Github Desktop, nos basta con descargar el programa de su página oficial:

GitHub Desktop
Simple collaboration from your desktop
Págiona oficial de Github Desktop.

Instalarlo e iniciar sesión con nuestro usuario de Github:

Iniciamos sesión en Github.com bajo "Accounts"

Una vez tengamos todo listo, ¡podemos crear nuestro primer repositorio!

Nuestro primer commit

Abre Github Desktop y haz clic en nuevo repositorio para crear un nuevo repositorio de prueba con el que haremos pruebas para este tutorial:

File>New Repository...

Rellenemos los datos del repositorio; selecciona un nombre para el repositorio, una carpeta donde tendras los archivos y, para este tutorial, no hagas clic en "inicializar el repositorio con un Leeme", ya que lo crearemos más tarde para simular que colaboramos con alguien:

Recuerda no seleccionar "Initialize this repo with a README".

Una hayamos creado nuestro repositorio, habremos creado una carpeta con un par de archivos de git, pero nos encontraremos con un repositorio vacio de contenido útil, nuestro.

Para ello, hacemos clic primero en "Ver en el explorador", lo cual nos abrirá la carpeta del repositorio en el explorador de archivos, y creamos un archivo de texto sencillo en el que escribimos algo que nos recuerde que se escribió en nuestro primer commit:

Una vez creado el archivo, volvemos a Github Desktop y podremos comrpobar que se muestra un archivo nuevo en la columna izquierda, que además nos indica que tiene cambios y, al estar seleccionado, nos muestra los cambios respecto el anterior commit en el espacio de la derecha.

Para hacer el commit, introducimos una descripción del mismo en el cuadro de texto y hacemos clic en “commit to main”:

Nuestro primer commit.

¡Ya tenemos nuestro primer commit! Pero, esto, ¿qué es? Piensa en ello como una especie de punto de guardado, una vez realizado, siempre podremos volver a este estado para todos los archivos que formen parte de nuestro repositorio.

Sin embargo, este archivo y el control de cambios solo están presentes en nuestro ordenador. Es hora de subirlos a nuestra cuenta de Github. Para ello, simplemente tendremos que hacer clic en “Publish repository” y rellenar los datos del diálogo que nos saldrá a continuación:

Una vez publicado, podemos navegar hasta nuestra página de Github con un navegador web y ver nuestro repositorio en línea:

Colaborar con otros

Una de las grandes ventajas del control de versiones es la facilidad con la que puedes colaborar con otros al usarla. Para demostrar cómo funcionaría esta funcionalidad, vamos a simular la colaboración en línea al editar el LEEME desde github.com, para después descargarnos los cambios a nuestro ordenador como si los hubiese efectuado un colega.

Lo primero que debemos hacer es dirigirnos a la página web de Github, navegar hasta nuestro repositorio y hacer clic en "Add a README". Una vez abiierto el editor, escribimos un LEEME corto y hacemos clic en "commit changes" para guardar los cambios:

Añadimos un LEEME desde la interfaz web.

Abrimos Github Desktop otra vez y es posible que no veas ningún cambio. Esto es normal, el programa no tiene manera de saber si algo ha cambiado sin antes consultar con Github, así que vamos a hacer que haga precisamente eso, haciendo clic en “Fetch origin”, para refrescar el origen (el repositorio en línea base de nuestro proyecto):

Una vez hecho esto, veremos que tenemos cambios que podemos descargar, y hacemos clic en “pull”, los bajaremos y, si navegamos hasta donde tenemos los archivos, veremos que, efectivamente, ahí tenemos el LEEME que escribimos en la página web:

Aquí está el leeme.

Tómate esto como un ejemplo en el que un compañero ha modificado un archivo. Debes primero consultar si han ocurrido cambios con “fetch” y después descarártelos con “pull”.

Jugamos con ramas

¡Vamos a hacer justicia a la imagen de portada de este artículo e irnos por las ramas un poco!

¿Qué es una rama? Una rama es una versión concreta del repositorio, por la cual puedes avanzar en paralelo. Esto es muy útil para proyectos en los que quieras probar varias soluciones diferentes al mismo tiempo, para poder comparar los resultados, por ejemplo, sin que los cambios en el repositorio de una versión influyan en el resto.

Esta funcionalidad es ampliamente utilizada para añadir funcionalidades concretas a un programa sin influir en el código principal hasta que esté lista. Esto funciona manteniendo una rama como la principal, de la que nacen otras ramas y a la que vuelven una vez se comprueba que los cambios son correctos y se fusiona el código.

Empecemos creando una rama nueva haciendo clic en “current branch”, después en “new branch” y por último introduciendo un nombre de la rama en el diálogo que aparece:

Vamos a modificar los archivos en esta rama; navegamos hasta la carpeta del repositorio y creamos un archivo nuevo y añadimos una línea de texto en el archivo original que creamos en la rama principal:

Para publicar la rama nueva, basta con hacer clic en "publish branch", y para cambiar de rama, simplemente tenemos que seleccionarla del desplegable:

Ya sabemos trabajar con ramas.

Fusionamos ramas

Si los cambios son completamente independientes, no tendremos problemas a la hora de fusionar ramas, es decir, de volver a unirlas para combinar los cambios en el proyecto que se han hecho en ambas ramas.

Sin embargo, suele ser el caso que ambas ramas modifican el mismo trozo de un archivo. En ese caso, ¿qué rama es la correcta? Aquí entra la resolución de conflictos.

Vamos a crear un conflicto para después solucionarlo, empecemos por cambiar a la rama principal y editar el archivo inicial para que incluya una línea de texto en la segunda línea del archivo, justo donde habíamos escrito algo en la otra rama:

Añadimos una segunda línea a "local.txt".

Vamos a fusionar ambas ramas: seleccionamosel desplegable de ramas y seleccionamos "Choose  abranch to merge into main", para seleccionar la rama nueva y fusionarla en main:

Seleccionamos la opción de fusionar ramas.

Github Desktop nos avisará de que existe un conflicto, y será nuestro trabajo solucionarlo. Para ello, seleccionaremos “abrir con el programa por defecto”, y se nos mostrará un archivo con las versiones de ambas ramas marcadas con banderas de inicio y final:

Basta con decidir que versión es la correcta y modificar el archivo, como si estuvieras editándolo normalmente, eliminando lo que no quieras y añadiendo lo que si necesitas:

Estando en la rama principal, si volvemos a la carpeta del repositorio, ahora deberíamos ver los dos archivos de texto, y si abrimos el archivo inicial, veremos que se han combinado los cambios tal y como hemos indicado:

Fusión existosa.

Conclusiones

Ahora ya deberías ser capaz de crear, avanzar y fusionar repositorios. Está claro que en este tutorial tan corto no íbamos a poder cubrir todas las opciones que te ofrece Git para el control de versiones, pero con la información aquí dada serás capaz de hacer todas las gestiones principales problema, muy raramente tienes necesidad de hacer algo más complicado.

Si ya dominas el tema y tienes curiosidad, recomiendo el siguiente tutorial de Git, pero ten cuidado, ya es con la terminal:

Git - gittutorial Documentation
Tutorial avanzado de Git.