Skip to content

Git

This content is not available in your language yet.

9.3 Git: Control de Versiones para Sysadmins

Sección titulada «9.3 Git: Control de Versiones para Sysadmins»

En un entorno profesional, la automatización sin control de versiones es un riesgo operativo. Scripts, playbooks, configuraciones y despliegues deben ser versionados, auditables y reproducibles. Aquí es donde entra Git, el sistema de control de versiones distribuido estándar en la industria.

Para un Sysadmin senior, Git no es solo una herramienta de desarrollo: es un componente crítico para gestionar infraestructura como código, configuraciones de sistemas y despliegues automatizados con garantías de trazabilidad.


Al finalizar este capítulo serás capaz de:

  • Comprender el modelo de funcionamiento de Git.
  • Gestionar repositorios locales y remotos.
  • Versionar scripts, configuraciones y playbooks.
  • Trabajar con ramas (branches) y flujos de cambios.
  • Resolver conflictos y mantener historial limpio.
  • Aplicar buenas prácticas en entornos profesionales.

Git es un sistema de control de versiones distribuido que permite:

  • registrar cambios en archivos
  • mantener historial completo
  • colaborar en equipos
  • revertir estados anteriores

A diferencia de otros sistemas, Git no guarda solo diferencias: guarda instantáneas (snapshots) del estado del proyecto.

Cada commit representa el estado completo del proyecto en un momento concreto.


Git se compone de tres áreas principales:

  • Working directory → archivos en local
  • Staging area (index) → área de preparación
  • Repositorio (.git) → historial versionado

Flujo típico:

Working → Staging → Commit → Repository

Un archivo en Git puede estar en:

  • untracked → no versionado
  • modified → modificado
  • staged → preparado
  • committed → registrado

Un commit incluye:

  • cambios realizados
  • autor
  • timestamp
  • mensaje descriptivo

Ejemplo:

Ventana de terminal
git commit -m "Añadir script de backup"

Las ramas permiten trabajar en paralelo:

  • main / master → rama principal
  • feature/* → nuevas funcionalidades
  • hotfix/* → correcciones urgentes

Crear rama:

Ventana de terminal
git branch nueva-feature
git checkout nueva-feature

O directamente:

Ventana de terminal
git checkout -b nueva-feature

Permiten sincronizar cambios:

Ventana de terminal
git remote add origin [email protected]
git push -u origin main

Cuando dos cambios afectan a las mismas líneas:

<<<<<<< HEAD
cambio local
=======
cambio remoto
>>>>>>> rama

Debe resolverse manualmente.


Versionar un proyecto de automatización:

  • script Bash de backup
  • playbook de Ansible
  • mantener historial y control de cambios

Ventana de terminal
mkdir automatizacion
cd automatizacion
git init

Ventana de terminal
cp ../backup.sh .
cp ../install_nginx.yml .

Ver estado:

Ventana de terminal
git status

Ventana de terminal
git add backup.sh install_nginx.yml

Ventana de terminal
git commit -m "Primer commit: scripts de automatización"

Ventana de terminal
git remote add origin [email protected]:usuario/automatizacion.git

Ventana de terminal
git push -u origin main

Modificar archivo:

Ventana de terminal
nano backup.sh

Ver cambios:

Ventana de terminal
git diff

Guardar:

Ventana de terminal
git add backup.sh
git commit -m "Mejora logging backup"
git push

[main abc123] Mejora logging backup
1 file changed, 3 insertions(+)

Please tell me who you are

-Solución:*

Ventana de terminal
git config --global user.name "Tu Nombre"
git config --global user.email "[email protected]"

rejected

-Causa:*

desincronización con remoto.

-Solución:*

Ventana de terminal
git pull --rebase

Ejemplo: claves privadas.

-Solución:*

usar .gitignore:

-.key
.env

-Solución:*

editar manualmente y:

Ventana de terminal
git add archivo
git commit

Mensajes poco claros dificultan auditoría.


tipo: descripción breve
detalle opcional

Ejemplo:

feat: añadir playbook nginx
fix: corregir ruta backup

  • nunca trabajar directamente en main
  • usar flujo controlado

-.log
-.tmp
backup/

Versionar:

  • scripts Bash
  • playbooks Ansible
  • configuraciones

Validación automática antes de commits:

Ventana de terminal
.git/hooks/pre-commit

Evitar exponer infraestructura:

  • usar GitHub privado / GitLab
  • controlar accesos

Git permite:

  • saber quién hizo cambios
  • cuándo
  • qué se modificó

Clave para entornos regulados.


Git es base de:

  • pipelines
  • despliegues automáticos
  • testing

Ventana de terminal
git revert HEAD

Nunca borrar historial en producción.


Has aprendido a utilizar Git como sistema de control de versiones aplicado a la administración de sistemas, permitiendo gestionar scripts, configuraciones e infraestructuras con trazabilidad y control total.

Dominar Git es imprescindible para cualquier flujo moderno de automatización y despliegue.

A partir de este punto, eres capaz de:

  • automatizar con Bash
  • gestionar infraestructuras con Ansible
  • versionar y auditar con Git

Con esto completas el bloque de automatización y estás preparado para abordar entornos más avanzados como plataformas de ejecución y orquestación.

➡️ Siguiente bloque recomendado: Virtualización y contenedores (10-virtualizacion).