Para explicar qué es GIT hace falta entender que en el mundo de la programación, es muy común encontrarse ante una situación en la que deseas realizar un cambio importante en tu proyecto, pero temes que las consecuencias de ello sean catastróficas para el código anterior. La solución más común, hace un tiempo, se basaba en realizar una copia de seguridad manual de todos los archivos en cuestión antes de realizar el cambio y mantenerlos apartados del código a modificar, por si, en caso de que algo fallase, hubiera que recuperar el estado anterior.
Sin embargo, este procedimiento era tedioso: grandes esperas para crear y transferir las copias (ya que en proyectos contundentes la cantidad de archivos a replicar es bastante elevada), mucha memoria ocupada con datos duplicados, falta de organización entre las versiones, etc… En cualquier caso, siempre se desembocaba en una irremediable pérdida de tiempo, esfuerzo y espacio.
Por suerte, Linus Torvalds (creador de Linux) se encargó de desarrollar el software Git, un programa que sería lanzado en 2007, enfocado en solucionar prácticamente todos los problemas relacionados con el mantenimiento de versiones de código.
Funcionamiento básico de GIT
En primer lugar, aquí tenemos un esquema básico de cómo relaciona GIT nuestro directorio local con el repositorio que se encuentra en el servidor:
Tal y como se puede apreciar, los archivos son creados y almacenados en primer lugar en nuestro directorio local. Cuando consideramos que estos están preparados para ser subidos a nuestro repositorio, son añadidos al Staging Area, donde se van almacenando hasta que a todos esos cambios se les atribuya un nombre mediante un commit, momento en el que pasarán al repositorio local. En este punto, nuestro código se encuentra todavía en nuestro ordenador, a tan solo un comando (push) de ser subido a nuestro repositorio remoto, ya en la nube.
Desde este momento, se puede dar el camino inverso. Si se necesitara clonar el repositorio de la nube, se procedería a realizar un pull para añadir esos archivos a nuestro repositorio local. Posteriormente se llevaría a cabo un checkout y un merge para comprobar las diferencias entre nuestros archivos locales y los recién clonados, y posteriormente fusionarlos.
Ventajas de GIT
Los beneficios que GIT ha aportado a la comunidad de programadores son muy abundantes, ya que ha sabido resolver problemas muy básicos de forma muy eficiente y simple, pudiendo manejar todo un repositorio mediante unas pocas líneas en la terminal de comandos. Algunas de las principales ventajas que ofrece son:
- Génesis y fusión de ramas: GIT introdujo el sistema de creación de “ramas” o branches, donde el programador puede separar el código que modifica de su rama principal o main en otras diferentes, sin perder código ni tener que hacer guardados locales manuales. Así, se puede trabajar en ramas secundarias sin alterar la rama funcional principal, ya sea creando una única rama secundaria para el desarrollo, o múltiples ramas, una cada vez que se requiera añadir una nueva característica al programa. Cuando el cambio realizado sea consistente y se desee incorporar a la rama principal, esta rama se fusionará con la rama main y, una vez cumplido su trabajo, se eliminará.
1: Esquema del funcionamiento de las ramas en GIT. Cuando se desea realizar o incorporar un cambio importante en el proyecto, se crea una rama de desarrollo, se realizan los cambios deseados y, cuando son funcionales, se incorporan a la rama main.
- Rapidez: la velocidad a la que GIT realiza todas las tareas locales que manualmente llevarían minutos es inusitada. En pocos segundos, incluso a veces casi al instante, es capaz de añadir grandes cantidades de archivos al repositorio local y subirlos al servidor.
- Conservación de todos los archivos: una de las grandes ventajas de GIT es el hecho de que, aunque todos los archivos se estén subiendo al repositorio remoto, en todo momento se mantendrá una copia de seguridad completa en el repositorio local, de forma que, si sucediera algo en los servidores de Git y se perdiera la información de la nube, los datos seguirían permaneciendo en nuestro equipo.
- Fiabilidad de los datos guardados: GIT se asegura de que cada vez que se realice un commit (el paso de los datos del staging area al repositorio local) los datos conserven su integridad, de tal forma que, si se desea volver a un commit previo, todo permanezca exactamente como estaba en el momento que se hizo.
- Posee un Staging area: esta es una sección muy importante, ya que en ella es donde se pueden revisar los archivos que se desean subir al repositorio, así como eliminar aquellos que no se desee conservar. De la misma forma, es el lugar donde, a la hora de clonar un repositorio se pueden examinar los archivos sin llegar a sobrescribir los locales, en caso de que solo queramos echar un vistazo al código.
Cómo empezar a usar GIT
Los usos que se le pueden dar a GIT son muy variados. Para llevar a cabo un proyecto personal, los más importantes son esencialmente dos:
- Crear un repositorio y subir archivos a él
- Creación de ramas y fusión de estas
Brevemente, vamos a ver cómo se pueden llevar a cabo ambos procesos.
1. Creación de un repositorio y subida de archivos
La forma más sencilla de crear un repositorio es mediante GitHub. Si nos registramos, veremos en la esquina superior derecha un icono con un “+”, donde si hacemos clic nos aparecerá un desplegable con la opción New repository.
Esta opción nos redirigirá a una página donde podremos introducir los datos que deseemos para nuestro repositorio: nombre, descripción, visibilidad y archivos adicionales. Para simplificar el proceso, evitaremos añadir inicialmente los archivos sugeridos, añadiendoles por nuestra cuenta más adelante en nuestro proyecto. Tras esto, haremos clic en Create repository.
¡Nuestro repositorio ya existe en GitHub! En este punto, se nos ofrecen varias alternativas en función de si hemos creado ya un repositorio local o no.
Si aún NO hemos hecho ningún commit, utilizaremos nuestra terminal de comandos para dirigirnos al lugar donde queremos tener nuestro proyecto e introduciremos las siguientes líneas:
Sí SÍ hemos creado ya un repositorio local y solo queremos enlazarlo con el remoto, utilizaremos los siguientes comandos:
A partir de este momento, cada vez que realicemos cambios en nuestro proyecto que creamos que deben ser guardados en el repositorio remoto, llevaremos a cabo los siguientes pasos:
- Añadir los cambios al Staging area con el comando
git add
- Agrupar los cambios bajo un nombre descriptivo para incluirlos en el repositorio local mediante el comando
git commit -m
Descripción del commit’
- Subir los cambios al repositorio remoto con el comando
git push
2. Creación y fusión de ramas
- En el caso de que queramos crear una rama secundaria para no perjudicar a la rama principal, utilizaremos el siguiente comando en la terminal:
git checkout -b branchname
De esta forma crearemos una nueva rama y a la vez nos trasladaremos a ella.
- Si queremos que nuestra rama secundaria también esté en nuestro repositorio, emplearemos el siguiente código para incluirla:
git push origin branchname.
Tras trabajar en nuestra rama secundaria, podremos fusionarla con la principal de la siguiente forma: primero, cambiando a la rama principal con
git checkout main
y posteriormente
git merge branchname
Finalmente, ya que todos los cambios se han incorporado a la rama main, podremos eliminar la rama secundaria con
git branch -d branchname
Conclusión
Resumidamente, GIT es un software muy útil para la conservación y gestión de versiones de código, siendo una herramienta esencial para la vida del programador hoy en día. Personalmente, me ha servido de mucho a lo largo del Bootcamp Full Stack y, sobre todo, del Training que he realizado en Oxygen Academy para poder llevar mi proyecto al día, confiando en que las versiones guardadas permanecerían a salvo de los cambios que realizara a posteriori, y listas para recurrir a ellas en caso de necesitarlas.
Su uso, tal y como he mostrado anteriormente, es muy simple, al menos a niveles básicos. Espero poder seguir haciendo uso de GIT y aprovechando todos sus beneficios al máximo, sobre todo en los casos en los que necesite utilizarlo para trabajos cooperativos.
Autor
Marina Robleño
Desarrolladora Junior en OXYGEN Training