Skip to content

Git

Git es un sistema de control de versiones distribuido que permite registrar y consultar los cambios realizados en los archivos de un proyecto.

Cuando trabajamos con documentación técnica, Git nos permite conservar un historial de cambios y conocer cómo ha evolucionado la documentación.

Aunque Git se utiliza principalmente en proyectos de desarrollo de software, puede gestionar versiones de cualquier conjunto de archivos, incluidos documentos Markdown.

Control de versiones

Cuando modificamos un archivo de forma manual podemos crear diferentes copias:

text
documentacion.md
documentacion-final.md
documentacion-final-2.md
documentacion-definitiva.md

Este sistema resulta difícil de mantener y no proporciona información clara sobre qué cambios se realizaron en cada versión.

Un sistema de control de versiones permite registrar la evolución de los archivos de forma organizada.

Con Git podemos:

  • registrar cambios;
  • mantener un historial;
  • identificar quién realizó un cambio;
  • consultar versiones anteriores;
  • comparar modificaciones;
  • recuperar estados anteriores del proyecto;
  • colaborar con otros usuarios.

Cada conjunto de cambios que decidimos registrar constituye un commit.

Repositorio

Git gestiona los archivos de un proyecto mediante un repositorio.

Un repositorio contiene los archivos del proyecto y la información necesaria para mantener su historial de cambios.

Podemos convertir un directorio existente en un repositorio Git mediante:

bash
git init

Por ejemplo:

bash
mkdir technical-documentation
cd technical-documentation
git init

Git creará dentro del proyecto un directorio oculto:

text
.git

Podemos comprobarlo mediante:

bash
ls -la

Directorio .git

El directorio .git contiene la información utilizada por Git para gestionar el repositorio.

No debemos modificar o eliminar manualmente su contenido.

Configuración inicial

Antes de crear commits, Git necesita conocer el nombre y el correo electrónico del autor.

Podemos configurar estos datos mediante:

bash
git config --global user.name "Name Surname"
git config --global user.email "name@example.com"

Podemos consultar la configuración mediante:

bash
git config --global --list

La opción --global aplica esta configuración al usuario actual y será utilizada por defecto en sus repositorios.

Estado del repositorio

Uno de los comandos que utilizaremos con mayor frecuencia es:

bash
git status

Este comando muestra el estado actual del repositorio y permite conocer qué archivos:

  • todavía no están siendo seguidos por Git;
  • han sido modificados;
  • están preparados para incluirse en el siguiente commit.

Es recomendable utilizar git status frecuentemente para comprobar qué cambios estamos gestionando antes de registrarlos.

Estados de los archivos

Al trabajar con Git, los cambios pasan por diferentes estados.

De forma simplificada:

text
Directorio de trabajo

     git add

   Staging area

    git commit

   Repositorio

Directorio de trabajo

El directorio de trabajo contiene los archivos con los que estamos trabajando.

Por ejemplo:

text
technical-documentation/
├── images/
└── README.md

Cuando creamos o modificamos un archivo, el cambio se encuentra inicialmente en el directorio de trabajo.

Staging area

La staging area permite seleccionar qué cambios queremos incluir en el próximo commit.

Podemos añadir un archivo mediante:

bash
git add README.md

También podemos preparar todos los cambios del directorio actual:

bash
git add .

Después podemos comprobar el resultado:

bash
git status

git add no crea un commit

git add no registra todavía una nueva versión del proyecto.

Únicamente prepara los cambios que formarán parte del siguiente commit.

Repositorio

Una vez preparados los cambios podemos registrarlos mediante un commit:

bash
git commit -m "Add initial documentation"

El texto indicado mediante -m es el mensaje del commit y debe describir brevemente el cambio realizado.

Commits

Un commit representa un estado concreto del proyecto dentro de su historial.

Por ejemplo, después de crear el documento inicial:

bash
git add README.md
git commit -m "Add initial documentation"

Posteriormente podemos modificar README.md, guardar los cambios y crear un nuevo commit:

bash
git add README.md
git commit -m "Add installation instructions"

De esta forma el historial refleja la evolución del documento.

Mensajes de commit

Los mensajes de commit deben ser breves y describir claramente el cambio realizado.

Durante el módulo utilizaremos mensajes de commit en inglés.

Por ejemplo:

text
Add installation instructions
Update configuration guide
Fix Markdown links
Add Ubuntu screenshots

Consultar los cambios

Después de modificar un archivo podemos comprobar qué ha cambiado mediante:

bash
git diff

Git mostrará las diferencias entre los archivos modificados y la última versión registrada.

Una vez que los cambios se han añadido a la staging area, podemos consultar las diferencias preparadas mediante:

bash
git diff --staged

Esto permite revisar los cambios antes de crear el commit.

Historial

Podemos consultar los commits realizados mediante:

bash
git log

Para obtener una representación más compacta:

bash
git log --oneline

Por ejemplo:

text
91a32bd Add installation instructions
48cf512 Add initial documentation

Cada commit dispone de un identificador que permite distinguirlo del resto.

Flujo básico de trabajo

Una vez creado el repositorio, el ciclo de trabajo habitual será:

  1. Modificar los archivos.
  2. Guardar los cambios.
  3. Comprobar el estado del repositorio.
  4. Revisar los cambios.
  5. Seleccionar los cambios que queremos registrar.
  6. Crear el commit.
  7. Comprobar el historial cuando sea necesario.

Los comandos correspondientes serían:

bash
git status
git diff
git add .
git status
git commit -m "Update documentation"
git log --oneline

No es necesario crear un commit cada vez que guardamos un archivo. Un commit debería representar un cambio coherente y reconocible dentro del proyecto.

Ejemplo completo

Podemos crear un pequeño proyecto de documentación y comenzar a gestionarlo con Git:

bash
mkdir technical-documentation
cd technical-documentation
git init
touch README.md
code .

Después de redactar y guardar el contenido de README.md, comprobamos el estado:

bash
git status

Preparamos el archivo:

bash
git add README.md

Volvemos a comprobar el estado:

bash
git status

Creamos el primer commit:

bash
git commit -m "Add initial documentation"

Finalmente, consultamos el historial:

bash
git log --oneline

A partir de este momento podemos continuar modificando la documentación y creando commits que registren su evolución.

Git y GitHub

Git y GitHub no son lo mismo.

Git es el sistema de control de versiones que estamos utilizando localmente en nuestro equipo.

GitHub es una plataforma que permite, entre otras funcionalidades, alojar repositorios Git en Internet.

Hasta ahora nuestro repositorio existe únicamente en nuestro equipo:

text
Equipo local
└── repositorio Git

En el siguiente epígrafe aprenderemos a conectarlo con un repositorio remoto alojado en GitHub.