9.3 Git: Control de Versiones para Sysadmins¶
Introducción¶
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.
Objetivos de aprendizaje¶
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.
Conceptos Teóricos¶
1. ¿Qué es Git?¶
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.
Concepto clave
Cada commit representa el estado completo del proyecto en un momento concreto.
2. Arquitectura de Git¶
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:
3. Estados de los archivos¶
Un archivo en Git puede estar en:
- untracked → no versionado
- modified → modificado
- staged → preparado
- committed → registrado
4. Commits e historial¶
Un commit incluye:
- cambios realizados
- autor
- timestamp
- mensaje descriptivo
Ejemplo:
5. Ramas (Branches)¶
Las ramas permiten trabajar en paralelo:
main/master→ rama principalfeature/*→ nuevas funcionalidadeshotfix/*→ correcciones urgentes
Crear rama:
O directamente:
6. Repositorios remotos¶
Permiten sincronizar cambios:
7. Merge y conflictos¶
Cuando dos cambios afectan a las mismas líneas:
Debe resolverse manualmente.
Laboratorio Práctico¶
Escenario¶
Versionar un proyecto de automatización:
- script Bash de backup
- playbook de Ansible
- mantener historial y control de cambios
Parte 1: Inicializar repositorio¶
Parte 2: Añadir archivos¶
Ver estado:
Parte 3: Añadir al staging¶
Parte 4: Crear commit¶
Parte 5: Crear repositorio remoto¶
Parte 6: Subir cambios¶
Parte 7: Workflow de cambios¶
Modificar archivo:
Ver cambios:
Guardar:
Output esperado¶
Errores Comunes y Troubleshooting¶
1. No configurar identidad¶
Solución:
2. Push rechazado¶
Causa:
desincronización con remoto.
Solución:
3. Añadir archivos sensibles¶
Ejemplo: claves privadas.
Solución:
usar .gitignore:
4. Conflictos de merge¶
Solución:
editar manualmente y:
5. Commits desordenados¶
Mensajes poco claros dificultan auditoría.
Buenas Prácticas (Nivel Senior)¶
1. Mensajes de commit claros¶
Ejemplo:
2. Uso de ramas¶
- nunca trabajar directamente en
main - usar flujo controlado
3. .gitignore adecuado¶
4. Integración con automatización¶
Versionar:
- scripts Bash
- playbooks Ansible
- configuraciones
5. Hooks¶
Validación automática antes de commits:
6. Repositorios privados¶
Evitar exponer infraestructura:
- usar GitHub privado / GitLab
- controlar accesos
7. Auditoría¶
Git permite:
- saber quién hizo cambios
- cuándo
- qué se modificó
Clave para entornos regulados.
8. Integración CI/CD¶
Git es base de:
- pipelines
- despliegues automáticos
- testing
9. Revertir cambios¶
Nunca borrar historial en producción.
Resumen y Siguiente Paso¶
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).