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»Introducción
Sección titulada «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
Sección titulada «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
Sección titulada «Conceptos Teóricos»1. ¿Qué es Git?
Sección titulada «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.
Cada commit representa el estado completo del proyecto en un momento concreto.
2. Arquitectura de Git
Sección titulada «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:
Working → Staging → Commit → Repository3. Estados de los archivos
Sección titulada «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
Sección titulada «4. Commits e historial»Un commit incluye:
- cambios realizados
- autor
- timestamp
- mensaje descriptivo
Ejemplo:
git commit -m "Añadir script de backup"5. Ramas (Branches)
Sección titulada «5. Ramas (Branches)»Las ramas permiten trabajar en paralelo:
main/master→ rama principalfeature/*→ nuevas funcionalidadeshotfix/*→ correcciones urgentes
Crear rama:
git branch nueva-featuregit checkout nueva-featureO directamente:
git checkout -b nueva-feature6. Repositorios remotos
Sección titulada «6. Repositorios remotos»Permiten sincronizar cambios:
git push -u origin main7. Merge y conflictos
Sección titulada «7. Merge y conflictos»Cuando dos cambios afectan a las mismas líneas:
<<<<<<< HEADcambio local=======cambio remoto>>>>>>> ramaDebe resolverse manualmente.
Laboratorio Práctico
Sección titulada «Laboratorio Práctico»Escenario
Sección titulada «Escenario»Versionar un proyecto de automatización:
- script Bash de backup
- playbook de Ansible
- mantener historial y control de cambios
Parte 1: Inicializar repositorio
Sección titulada «Parte 1: Inicializar repositorio»mkdir automatizacioncd automatizaciongit initParte 2: Añadir archivos
Sección titulada «Parte 2: Añadir archivos»cp ../backup.sh .cp ../install_nginx.yml .Ver estado:
git statusParte 3: Añadir al staging
Sección titulada «Parte 3: Añadir al staging»git add backup.sh install_nginx.ymlParte 4: Crear commit
Sección titulada «Parte 4: Crear commit»git commit -m "Primer commit: scripts de automatización"Parte 5: Crear repositorio remoto
Sección titulada «Parte 5: Crear repositorio remoto»Parte 6: Subir cambios
Sección titulada «Parte 6: Subir cambios»git push -u origin mainParte 7: Workflow de cambios
Sección titulada «Parte 7: Workflow de cambios»Modificar archivo:
nano backup.shVer cambios:
git diffGuardar:
git add backup.shgit commit -m "Mejora logging backup"git pushOutput esperado
Sección titulada «Output esperado»[main abc123] Mejora logging backup 1 file changed, 3 insertions(+)Errores Comunes y Troubleshooting
Sección titulada «Errores Comunes y Troubleshooting»1. No configurar identidad
Sección titulada «1. No configurar identidad»Please tell me who you are-Solución:*
git config --global user.name "Tu Nombre"2. Push rechazado
Sección titulada «2. Push rechazado»rejected-Causa:*
desincronización con remoto.
-Solución:*
git pull --rebase3. Añadir archivos sensibles
Sección titulada «3. Añadir archivos sensibles»Ejemplo: claves privadas.
-Solución:*
usar .gitignore:
-.key.env4. Conflictos de merge
Sección titulada «4. Conflictos de merge»-Solución:*
editar manualmente y:
git add archivogit commit5. Commits desordenados
Sección titulada «5. Commits desordenados»Mensajes poco claros dificultan auditoría.
Buenas Prácticas (Nivel Senior)
Sección titulada «Buenas Prácticas (Nivel Senior)»1. Mensajes de commit claros
Sección titulada «1. Mensajes de commit claros»tipo: descripción breve
detalle opcionalEjemplo:
feat: añadir playbook nginxfix: corregir ruta backup2. Uso de ramas
Sección titulada «2. Uso de ramas»- nunca trabajar directamente en
main - usar flujo controlado
3. .gitignore adecuado
Sección titulada «3. .gitignore adecuado»-.log-.tmpbackup/4. Integración con automatización
Sección titulada «4. Integración con automatización»Versionar:
- scripts Bash
- playbooks Ansible
- configuraciones
5. Hooks
Sección titulada «5. Hooks»Validación automática antes de commits:
.git/hooks/pre-commit6. Repositorios privados
Sección titulada «6. Repositorios privados»Evitar exponer infraestructura:
- usar GitHub privado / GitLab
- controlar accesos
7. Auditoría
Sección titulada «7. Auditoría»Git permite:
- saber quién hizo cambios
- cuándo
- qué se modificó
Clave para entornos regulados.
8. Integración CI/CD
Sección titulada «8. Integración CI/CD»Git es base de:
- pipelines
- despliegues automáticos
- testing
9. Revertir cambios
Sección titulada «9. Revertir cambios»git revert HEADNunca borrar historial en producción.
Resumen y Siguiente Paso
Sección titulada «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).
