Git – Sistema de Control de Versiones – Guía Base

Historia

Creado por Linus Torvalds en 2005 como una respuesta a la necesidad de un sistema de control de versiones eficiente y de código abierto para el kernel de Linux. Antes de Git, el equipo de Linux utilizaba BitKeeper, pero tenía restricciones de licencia.

Git se diseñó con un enfoque en velocidad, integridad de datos y soporte para flujos de trabajo distribuidos. Sus principales características incluyen:

  • Distribución: No depende de un servidor central.
  • Rendimiento: Maneja grandes volúmenes de datos de manera eficiente.
  • Integridad: Cada commit se almacena con un hash SHA-1, garantizando la integridad de los datos.
  • Flexibilidad: Soporta múltiples flujos de trabajo.
  • Su adopción: se expandió rápidamente y hoy es el estándar en la industria del desarrollo de software.

Comparación con otros sistemas de control de versiones:

  • CVS y SVN: Sistemas centralizados que requieren conexión constante a un servidor.
  • Mercurial: Similar a Git en funcionalidad, pero con menor adopción en la industria.
  • Perforce: Utilizado en entornos corporativos y en la industria de los videojuegos, aunque con menor flexibilidad que Git.

1. Conceptos Fundamentales de Git

Existen otros conceptos como head e index, pero los tocaremos mas adelante.

2. Instalemos GIT

En Windows

Fácil como siempre, descargar el instalador desde https://git-scm.com/ y dar clic en siguiente, siguiente (como siempre), pero ojo, en el caso de git para Windows, el instalador te sugiere configuraciones que pueden parecer complejas, por ahora dejar los valores por defecto en la instalación.

En Linux (recomendado)

En el caso de Linux es más sencillo aún, sobre todo por el hecho de que Git en nativo para Linux, ya que ambos fueron creados por Linus Torvalds; sin embargo, pueden varias los comandos dependiendo de la distribución.

En distros basadas en Debian, paquetería deb

sudo apt-get install git

En distros con paquetería rpm, tales como Fedora, Red Hat …

sudo dnf install git

En distros basadas en Arch Linux

sudo pacman -S git

En Mac … sin palabras…

3. Configuración Básica

Te recomiendo usar Linux, ya sea como máquina virtual o como sistema operativo principal; sin embargo, los comandos de git son los mismos tanto en Windows como en Linux, aunque existe un despreciable diferencia que tocaremos en su momento, por ahora empecemos con la configuración básica.

Cada commit en Git requiere un usuario y un correo asociado:

git config --global user.name "Tu Nombre"
git config --global user.email "tuemail@example.com"

Estos datos serán utilizados en los commits y permitirán identificar quién realizó los cambios.

Editor por defecto

El editor predeterminado de Git es Vi, pero podemos cambiarlo a otro, por ejemplo Nano:

git config --global core.editor "nano"

Ver la configuración actual

Podemos verificar la configuración de Git con:

git config --list

Esto mostrará un listado con todos los valores configurados hasta el momento.

Habilitar colores en la terminal

Para mejorar la visualización de los comandos de Git, activamos el uso de colores:

git config --global color.ui auto

Configurar almacenamiento en caché de credenciales

Para evitar ingresar la contraseña en cada interacción con repositorios remotos, podemos almacenar credenciales:

git config --global credential.helper cache

Para establecer un tiempo límite en segundos:

git config --global credential.helper 'cache --timeout=3600'

4. Inicializar un Repositorio Local

Un repositorio en Git es un contenedor donde se almacenan los archivos de un proyecto junto con su historial de cambios. En este caso crearemos un repositorio local.

Crear una carpeta

Accedemos a ella desde una terminal y ejecutamos un:

git init

Esto crea un subdirectorio .git que contiene toda la información del repositorio.

¡Atento! Si un archivo o una carpeta empieza con un punto en el nombre, es para ocultarlo. Por tal motivo este directorio llamado .git que se acaba de crear al ejecutar git init estará oculta.

Clonar un Repositorio Existente

Si el repositorio ya existe en un servidor remoto (por ejemplo, en GitHub), podemos clonarlo con:

git clone URL_DEL_REPOSITORIO

Ejemplo:

git clone https://github.com/usuario/proyecto.git

Git clasifica los archivos en tres estados:
  • Untracked: Archivos nuevos que Git aún no rastrea.
  • Tracked: Archivos ya agregados al repositorio.
  • Staged: Archivos preparados para ser confirmados.

Ver estado

Para ver qué archivos han cambiado en el repositorio:

git status

Agregar Archivos al Área de Preparación

Antes de confirmar cambios, debemos agregarlos al área de preparación:

Todos los archivos y directorios

git add .

Archivos específicos

git add archivo.txt

Realizar Commits

Un commit guarda los cambios en el repositorio junto con un mensaje descriptivo:

git commit -m "Mensaje descriptivo del cambio"

Si queremos agregar todos los archivos modificados y hacer el commit en un solo paso:

git commit -a -m "Mensaje del commit"

Para ver un registro de todos los commits realizados:

git log

  • git log --oneline → Muestra los commits en una sola línea cada uno.
  • git log --graph → Representa visualmente el historial de cambios.

Eliminar Archivos

Recuerda, git es un sistema de control de versiones, por tal motivo todos los cambios que ejecutes, incluido eliminar archivos solo serán confirmados al ejecutar un commit.

git rm archivo.txt
git commit -m "Eliminar archivo.txt"

Restaurar archivo antes de hacer un commit

git checkout -- archivo.txt

No olvidar que todos los cambios se encuentran en el área de preparación antes de ser confirmador mediante git commit

5. Ramas

Las ramas en Git permiten desarrollar nuevas características de manera independiente sin afectar el código principal. Esto facilita el trabajo colaborativo y la organización del desarrollo.

¿Qué es una Rama?

  • Una rama es una línea de desarrollo independiente.
  • La rama principal por defecto en Git es main o master.
  • Permiten trabajar en nuevas características sin afectar el código estable.

Ver Ramas Disponibles

Para ver las ramas existentes en el repositorio:

git branch

Esto mostrará un listado de las ramas locales, resaltando la rama activa con un *.


Creación y Cambio de Ramas

Vamos a crear una rama con el nombre de nueva_funcionalidad:

git branch nueva_funcionalidad

Para movernos a la nueva rama

git checkout nueva_funcionalidad

A partir de Git 2.23, se puede usar el comando más intuitivo

git switch nueva_funcionalidad

Crear y Cambiar de Rama en un Solo Paso:

Modo nativo:

git checkout -b nueva_funcionalidad

Modo nuevo

git switch -c nueva_funcionalidad

Fusionado de Ramas

Después de realizar cambios en una rama, podemos fusionarlos en otra rama (por ejemplo, en main).

Nos aseguramos de estar en main:

git checkout main

con switch:

git switch main

Fusionamos la rama

git merge nueva_funcionalidad

Si la fusión no tiene conflictos, los cambios se incorporarán sin problemas.

Después de fusionar una rama, podemos eliminarla para mantener limpio el repositorio.

git branch -d nueva_funcionalidad

Si la rama no se ha fusionado, usamos -D para forzar la eliminación:

git branch -D nueva_funcionalidad

Comando adicionales importantes

Hemos revisado los conceptos básicos de Git y sus comandos, sin embargo, su ecosistema es mucho más amplio y en algunos escenarios un poco complejo, seguiremos repasando funcionalidades avanzadas en sesiones futuras, pero dejo algunos comando importantes a tener en cuenta.

Si trabajamos con repositorios remotos, por ejemplo GitHub podemos conectarnos mediante:

git remote add origin url_del_repositorio.git

Si queremos verificar la conexión:

git remote -v

Git Push

El comando git push te permite subir los commits desde tu rama (branch) local en tu repositorio git local al repositorio remoto

git push -u origin main

Git Pull

Git Pull actualiza tu repositorio local con los cambios realizados en tu repositorio remoto.

git pull origin main

Veámoslo en la pizarra…

Teniendo en cuenta para nuestro ejemplo:

  • Origin: Repositorio Remoto
  • Main: Repositorio Local

Laboratorio

Para poner en práctica los conceptos aprendidos crearemos un repositorio remoto en GitHub a fin de realizar la publicación de nuestro proyecto local.

Paso 1

Crearemos nuestro repositorio local iniciando con la creación del directorio que alojara nuestro proyecto.

Accedemos mediante terminal a nuestra carpeta

Notar que hemos creado un archivo llamado Hola_Mundo.txt el cual será publicado en GitHub posteriormente.

Paso 2

Creamos un repositorio en GitHub

Al crear un repositorio nuevo identificamos la URL del repositorio y algunos comandos clave para una posterior publicación.

Paso 3

Inicializamos el repositorio y configuramos los datos globales.

Paso 4

Conectamos nuestro repositorio local con GitHub, copiando la línea proporcionada en el paso 2.

Nos dirigimos a nuestro CMD y ejecutamos:

Paso 5

Crearemos una rama llamada main

Agregamos todos el contenido de nuestro repositorio local al staging area.

Paso 6

Creamos nuestro primer commit

Paso 7

Ejecutamos nuestro primer Push

Y verificamos que nuestro repositorio local se ha publicado en GitHub

Listo, se ha realizado correctamente la publicación de tu primer repositorio.