Primeros pasos con Git

Primeros pasos con Git

Ningún desarrollo importante de software en la actualidad es llevado a cabo por una sola persona. De hecho, en muchos proyectos encontraremos gente ubicada en distintos países y zonas horarias. ¿Cómo es posible coordinar el trabajo y ver quién hace cada cosa y cuándo? Intercambiar archivos comprimidos por correo electrónico o guardar versiones separadas con nombres distintos puede volverse tedioso e imposible de mantener en el tiempo. Por ese motivo, los sistemas de control de versiones (VCS por sus siglas en inglés) representan una herramienta indispensable para lograr un producto de calidad. En esta guía aprenderás los conceptos fundamentales sobre Git, uno de los VCS más utilizados hoy en día.

Entre otras cosas, un VCS te permite guardar los cambios de uno o más archivos en el tiempo para poder volver atrás si es necesario. En realidad, mantiene un registro ordenado de todas las actividades de colaboración en un proyecto.

Requisitos previos

Paso 1: Verificación de disponibilidad

Git está disponible por defecto en cualquier distribución moderna de GNU/Linux. Para verificarlo luego de haber puesto en marcha tu servidor Ubuntu 20.04, ejecuta el siguiente comando a fin de ver la versión actual:

git --version

Si bien es posible instalar versiones más recientes, la que está incluida en los repositorios es suficiente para esta guía y para aprender a usar Git.

Paso 2: Creación de un repositorio

Cada proyecto consiste de una serie de archivos y directorios. En conjunto le damos el nombre de repositorio a la carpeta donde los almacenamos. Previamente deberemos indicarle a Git que deseamos llevar cuenta de los cambios que hagamos ahí.

Para comenzar, crea un directorio llamado aprender-git:

mkdir aprender-git
cd aprender-git

Ahora inicializa el repositorio:

git init .

Como ilustra la imagen de arriba, acabamos de crear un repositorio vacío en la ubicación que especificamos. Con el transcurso del tiempo, el subdirectorio .git contendrá el historial de cambios del proyecto y las configuraciones correspondientes. Es importante aclarar que eliminar este directorio ocasionará la pérdida de esta información. Por esa razón, se crea y debe mantenerse oculto para evitar borrados accidentales.

Paso 3: Generación de archivos en el repositorio

El solo hecho de agregar archivos dentro de un repositorio no hace que Git lleve cuenta de las modificaciones que hagamos en ellos. Antes de eso es necesario agregarlos al área del repositorio donde se observan los cambios, conocida como staging. De esta forma, podemos hacer cambios en el contenido pero sin agregarlos al historial sino hasta que estemos listos para hacerlo.

Veamos qué sucede cuando generamos dos archivos vacíos llamados archivo1.txt y archivo2.txt y luego observamos el estado del repositorio:

touch archivo1.txt
touch archivo2.txt
git status

Las dos primeras líneas nos sirven para introducir dos nuevos conceptos fundamentales. La primera de ellas indica que estamos en la rama (branch) master. En Git, las ramas son líneas independientes de desarrollo que utilizamos para trabajar sin afectar el producto principal. En este momento, solamente tenemos la rama master ya que no hemos creado ninguna otra. La segunda línea nos dice que no hay commits todavía, o que no hemos tomado ninguna foto del estado del repositorio.

Un commit es un snapshot del repositorio en un momento dado.

Además, ambos archivos aparecen como untracked. Esto nos dice precisamente que Git detectó archivos en el directorio que todavía no agregamos al área de observación.

Ahora agrega contenido a ambos archivos pero solamente añade archivo1.txt al área de staging:

echo "Soy el archivo 1" > archivo1.txt
echo "Soy el archivo 2" > archivo2.txt
git add archivo1.txt
git status

Ahora el estado del repositorio nos dice que hay un nuevo archivo. No es nuevo en el sentido que sea recién creado, sino que Git ahora lo tiene en observación:

En este punto ya estamos casi listos para comenzar a tomar snapshots del repositorio.

Paso 4: Configuración básica de Git

Si intentamos realizar nuestra primera instantánea veremos el siguiente aviso:

git commit -m "Commit inicial del archivo 1"

Git nos está diciendo que todavía no sabe quién está por hacer el commit. Esta información es necesaria para poder llevar cuenta de las acciones en el repositorio.

Si bien la opción --global hace posible que establezcamos la identidad para todo el sistema, omítela por el momento para hacerlo en el repositorio actual solamente. Recuerda reemplazar tu.correo.aqui@ejemplo.com por el que corresponda en tu caso.

git config user.email "tu.correo.aqui@ejemplo.com"
git config user.name "Gabriel Cánepa"
git commit -m "Commit inicial del archivo 1"
git status

La primera instantánea del repositorio también se conoce como la raíz, a la que Git le asignó el hash d11b583. Esta identificación será diferente en tu caso pero el significado es el mismo.

Es momento de hacer lo mismo en archivo2.txt y de tomar una segunda instantánea:

git add archivo2.txt
git commit -m "Commit inicial del archivo 2"
git status

El estado del repositorio ahora indica que no hay nada más (archivos o modificaciones recientes) que agregar en otro commit:

El hash que identifica a esta snapshot es 55373dc. Junto al anterior aparece en el historial del repositorio hasta el momento:

git log

Los números 1 y 2 indican los mensajes de los commits que realizamos. En la imagen también observamos el hash entero de cada uno.

Conclusión

En esta guía aprendiste a crear un repositorio, hacer modificaciones en archivos, tomar instantáneas y ver el historial. Este es el primer paso en el uso de un sistema de control de versiones como Git. Para continuar con el tema, en el próximo artículo aprenderás a crear ramas, realizar cambios en cada una, incorporarlos al producto principal e incluso volver atrás en el historial para deshacerlos.

¿Te resultó útil esta guía?

Imagen por defecto
Gabriel Cánepa
Gabriel trabaja actualmente como desarrollador full-stack en Scalar, una firma que se dedica a hacer valuaciones de empresas. Es Administrador de Sistemas certificado por la Fundación Linux y previamente ha escrito un gran número de artículos y contenidos técnicos sobre el tema para: DigitalOcean, Linode, Carrera Linux Argentina y Tecmint. Tiene una certificación en programación de la Universidad de Brigham Young-Idaho, y está completando las carreras de programador y analista de sistemas en la Universidad Nacional de Villa Mercedes (UNViMe). En su tiempo libre, Gabriel disfruta leyendo libros de Stephen R. Covey, tocando piano y guitarra, y enseñando conocimientos de programación a su dos hijas.