Al trabajar en la edición de cualquier archivo, en especial archivos de texto (código), solemos modificar, eliminar y agregar líneas, lo cual puede resultar en el arrepentimiento. En ocasiones realizamos un cambio que altera por completo el funcionamiento de nuestro programa, por lo cual algunas personas inician un control de versiones rústico sin darse cuenta; cuando empiezan a guardar archivos bajo nombres como «[archivo]primero.txt», «[archivo]elBueno.txt», «[archivo]elBueno2.txt», «[archivo]ahoraSiElBueno.txt», entonces es momento de comenzar con algún buen gestor de versiones.
Todo lo que explico a continuación es especialmente dirigido a quienes se inician (o ya están avanzados) en la programación porque es a lo que yo me dedico, pero es perfectamente aplicable a cualquier área que requiera de trabajar sobre la edición de archivos.
El control de versiones cubre algunas necesidades principales:
- Organizar y respaldar el progreso del trabajo.
- Facilitar el trabajo en equipo.
- Facilitar el trabajo sobre ideas simultáneas sin necesidad de que una afecte al avance de otra.
- Simplificar la integración del trabajo.
Git es un proyecto de Software Libre que inició Linus Torvalds en 2005 para poder llevar el control de versiones del Kernel de Linux. Lo primero que debemos saber al respecto es que continúa siendo Software Libre que podemos manejar desde la terminal de nuestra computadora y que existen algunas plataformas en línea para facilitar su uso, tales como GitHub y GitLab. Lo siguiente que hay que tener en cuenta es que está pensado para poder modificar el mismo proyecto simultáneamente, por lo que tenemos que familiarizarnos con el uso de “ramas” que explicaré en la siguiente entrada.
Por ahora hay que aprender a configurar Git para poder empezar a usarlo, usamos los siguientes comandos, para este ejemplo usaré mi nombre y un correo inexistente:
~] $ git config --global user.name "karla"
~] $ git config --global user.email “eee@mail.com”
Estos datos de configuración no representan un usuario en alguna plataforma ni significa que estás generando una cuenta, simplemente git lo guarda para que proyectos en los que hay más autores o que se suben en línea, podamos guardar control de quién realizó una parte y poder contactarlo establecer contacto en caso de necesitarlo.
De momento aprenderemos a inicializar el control de versiones de un proyecto. Git utiliza “repositorios” que no son más que carpetas con un archivo de configuración oculto en el que se guardará el estado de cada versión, algo así como un snapshot de la carpeta.
Para inicializar el repositorio abrimos la terminal y creamos la carpeta (en este caso la llamaré “ejemplo” que tendrá nuestro repositorio y nos movemos a ella:
~] $ mkdir ejemplo
Después inicializamos el repositorio correspondiente a la carpeta con el mismo nombre que le hemos asignado:
~] $ git init ejemplo
No hemos agregado nada al repositorio, podemos verificar su estado con el comando siguiente, y tendremos un resultado similar al que muestro:
~] $ cd ejemplo
ejemplo] $ git status
On branch master
Initial commit
nothing to commit (create/copy files and use "git add" to track)
Ahora empezamos a hacer cambios en el repositorio creando algún archivo:
ejemplo] $ touch haikus.txt
y con nuestro editor de texto favorito lo editamos, en este caso agregaré las líneas siguientes:
“Al Fuji subes
despacio —pero subes,
caracolito.”
Kobayashi Issa
Entonces podemos guardar la primera versión de nuestro archivo usando los siguientes comandos de Git:
- Primero agregamos los cambios que acabamos de hacer al respositorio:
ejemplo] $ git add haikus.txt
- Lo siguiente es guardar el cambio con un mensaje corto que nos haga recordar lo que hemos cambiado en el futuro y tendremos un mensaje como el siguiente:
ejemplo] $ git commit -m “agregué haiku de Kobayashi Issa”
[master (root-commit) f82cf06] agregué haiku de kobayashi issa i"
1 file changed, 5 insertions(+)
create mode 100644 haikus.txt
En este punto ya hay cambios agregados en nuestro repositorio, que podemos ver ejecutando el comando log:
ejemplo] $ git log
commit f82cf06a3530df2511e4dbc1abcd8ee7a10f6762 (HEAD -> master)
Author: karla <eee@mail.com>
Date: Mon Oct 22 07:14:10 2018 -0500
agregué haiku de kobayashi issa
Ahora, cada cambio que hagamos y guardemos como el anterior quedará registrado y podremos referirnos a su commit correspondiente con la clave que se muestra en la terminal, en este caso “f82cf06a3530df2511e4dbc1abcd8ee7a10f6762”, aunque con los primeros y caracteres generalmente es suficiente (en este caso “f82cf06”), y en caso de que desees volver a alguna versión anterior puedes ejecutar el comando git checkout ḿás el código del commit para visualizar el estado del repositorio en el momento en el que creaste ese commit. Aunque entonces es viable iniciar una rama para trabajar simultáneamente sin perder las versiones que hayas hecho antes de decidir volver a una antigua versión. Lo cual explicaré en la siguiente entrada.