Cómo subir un repositorio Git a GitHub

¿Qué es Git?

Git es un software de control de versiones diseñado por Linus Torvalds con el que podremos crear repositorios locales de nuestros proyectos para posteriormente subirlos a un servidor o repositorio remoto para poder trabajar colaborativamente con un equipo. Este servidor puede ser GitHub, de tal manera que nuestro trabajo estará disponible para cualquier persona que quiera verlo y descargarlo. De esta manera dispondremos de una versión en línea de nuestro trabajo, cosa que puede ser muy útil tanto para mostrar tus códigos fuente como para ofrecer la última versión actualizada de nuestro trabajo a los usuarios.

El uso de Git puede ser realmente complicado al principio, tiene diversas funciones y utilidades que nos pueden abrumar, sobretodo si no somos programadores ni estamos acostumbrados a trabajar con el Terminal. Sin embargo, si básicamente lo usamos para mantener el trabajo actualizado, subirlo a GitHub y ocasionalmente volver atrás a alguna versión guardada, podemos reducir su curva de aprendizaje a unos pocos comandos de git. De todas maneras, recomiendo leer los primeros capítulos del manual oficial de Git para saber todo lo que este sistema nos puede ofrecer.

No soy programador, ¿para qué necesito Git?

En mi caso soy diseñador gráfico, eso quiere decir que no estoy familiarizado con códigos fuente ni lenguajes de programación. Sin embargo, dado que en los últimos trabajos me pidieron hacer páginas web he tenido que aprender algo de PHP y JavaScript para poder dotar de funcionalidad a mi HTML y CSS básico. Lamentablemente tener el código limpio y actualizado resultó ser harto complicado, por lo que buscando en internet llegué hasta el control de versiones Git. ¡Un nuevo mundo se abrió ante mí!

No sólo es útil para programación, también lo es para cualquier otro trabajo que tengamos en el ordenador. Git no es una herramienta exclusiva para programación, no hace distinción entre un archivo PHP o un PSD. Puedes modificar un archivo gráfico en Photoshop, añadirlo al repositorio Git, mostrarlo al cliente y si no le gusta volver a la versión previamente guardada en el repositorio Git, sin tener decenas de versiones guardadas en subcarpetas, ni poniendo los típicos _v2, v3, vFINAL, vFINAL_OK o vFINAL_OKOK que inundan las carpetas de trabajo de los diseñadores gráficos. Iniciando un repositorio de Git en la carpeta de trabajo nos ahorraremos duplicidades en archivos.

¿Cómo se usa Git?

Para empezar a usar Git he creado un pequeño tutorial muy básico para empezar. En el tutorial primero creo un repositorio en una carpeta con los archivos de un juego conversacional y posteriormente subo esos archivos a GitHub desde el terminal (concretamente, con Git Bash, utilidad incluida en la descarga básica de Git para Windows). Creo también el archivo readme.md con el editor de markdown Typora. En la segunda parte, configuro una carpeta de trabajo en Visual Studio Code, creo un repositorio vacío desde el Visual Studio Code y añado archivos al repositorio también con este editor. Posteriormente subo el repositorio a GitHub, añadiendo por el camino un archivo .gitignore para no subir los originales en psd ni la carpeta de materiales.

Comandos básicos de Git

Lo básico para empezar, inicializar un nuevo repositorio con init en la carpeta donde tienes tu proyecto (o donde lo vas a tener):

git init

Añadir todos los nuevos archivos al repositorio con add (existen dos formas para ello):

git add . 
git add -A

Comprobar el estado de los archivos con status:

git status

Confirmar los cambios con commit:

git commit -m "mi mensaje"

Siempre tenemos que poner un mensaje para cada confirmación. De esta manera será mucho más sencillo poder volver a una versión anterior si podemos leer qué se hizo en dicha versión.

¿Cómo volver a una versión anterior?

En el tutorial se ha visto cómo iniciar un repositorio, llenarlo con nuestros archivos y posteriormente subir todo ese material a GitHub. Pero, ¿cómo volver a una versión anterior?

Supongamos que hemos preparado un archivo tras hacer un commit y nos hemos dado cuenta de que la modificación no está bien. En el ejemplo del vídeo, si me hubiera equivocado una segunda vez al editar el readme.md podría haber puesto el comando:

git checkout -- readme.md

Con este comando revertimos los últimos cambios en el archivo readme.md hasta la versión previamente guardada en el repositorio. Pero, ¿qué pasa si queremos ir a una versión más antigua en el tiempo? Para ello primero tenemos que revisar las confirmaciones anteriormente realizadas en el repositorio con log:

git log

Si tenemos un historial muy amplio podemos reducir la búsqueda a un tiempo determinado, por ejemplo dos semanas:

git log --since=2.weeks

Una vez que tenemos un listado en pantalla, veremos cada commit con su hash. El hash es el tremebundo batiburrillo alfanumérico al lado del commit:

$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

Pues bien, lo que tendremos que hacer es escribir de nuevo un checkout con ese tremebundo batiburrillo:

git checkout ca82a6dff817ec66f44342007202690a93763949

Veremos entonces que volvemos a una versión anterior. ¿Significa eso que los cambios se han perdido? Sí y no. Resulta que se ha creado una ramificación. Eso puede resultar confuso, pero es muy útil, porque es como no perder nada. Sigues teniendo la antigua versión en la rama MASTER.

git checkout master

Entonces, puedes trabajar con la nueva rama o seguir en la anterior. Puede ser útil tener diferentes ramas con diferentes diseños o partes del trabajo. Puedes crear una nueva rama con branch:

git branch nueva_rama

Y entrar en ramas nuevamente con checkout:

git checkout nueva_rama

De esta manera, cambiando de ramas, puedes tener versiones distintas de tu trabajo, dependiendo de en qué te encuntres trabajando en cada momento. Finalmente, puedes unificar las ramas con merge:

git checkout master
Switched to branch 'master'
git merge nueva_rama

Y bueno, creo que lo dejo aquí, realmente no uso Git más allá de estos comandos básicos y creo que puede ser beneficioso para muchos diseñadores gráficos y aficionados a la programación. Tener un control de versiones de nuestros archivos .psd o .ai o incluso .indd sin generar duplicidades y múltiples carpetas puede simplificarnos mucho la vida. Por otro lado, si creamos un juego o una app y queremos liberarla al gran público y no tenemos un servidor, o bien queremos guardarla en un lugar seguro, la opción de subir nuestro repositorio a GitHub es algo a tener muy en cuenta. ¡Espero que os haya sido útil!