- GitHub no es un sistema de backup ya que no almacena configuraciones locales, hooks ni el reflog completo del usuario.
- Existen métodos manuales como el clon reflejado y herramientas automatizadas para asegurar código, wikis y objetos LFS.
- En entornos profesionales es crítico reducir el RPO a frecuencias horarias y asegurar la inmutabilidad de los datos frente a errores de IA.
- GitHub Enterprise ofrece utilidades específicas de snapshot para restauraciones completas de instancias bajo condiciones de versión estrictas.

Mucha gente piensa que por tener el código subido a la nube ya tiene el culo cubierto, pero la realidad es que confundir un hosting de repositorios con una copia de seguridad es un error que puede salir carísimo. GitHub es una herramienta brutal para colaborar y gestionar versiones, pero no nació para ser tu red de seguridad ante desastres, y confiar ciegamente en él es jugar a la ruleta rusa con tu trabajo.
Ya sea que gestiones un pequeño proyecto personal o que lleves la infraestructura de una empresa entera, es vital entender que el riesgo de pérdida de datos sigue ahí, ya sea por un error humano, un ataque malintencionado o un fallo en la automatización. Por eso, montar una estrategia de respaldo seria es lo único que te permitirá dormir tranquilo por las noches.
¿Por qué GitHub no es un backup real?

El primer gran malentendido es creer que hacer un push al final del día equivale a respaldar el proyecto. Cuando subes cambios, estás moviendo el código, pero el repositorio local y el remoto son entidades distintas. Hay un montón de cosas que se quedan en tu máquina y que GitHub jamás verá, como los hooks de Git (esos scripts que automatizan tareas antes de un commit) o el fichero .git/config, donde guardas tus preferencias y alias personalizados.
Otro punto crítico es el reflog, ese historial maestro que te permite rescatar commits que parecen haber desaparecido. El servidor tiene el suyo y tú el tuyo, pero no tienes acceso al reflog interno de GitHub, por lo que si borras algo localmente y no estaba en el servidor, ese dato se ha ido al hoyo. Además, Git permite reescribir la historia mediante comandos como el rebase o el force push; si alguien con permisos borra commits o altera el historial, el servidor aceptará el cambio como válido y habrás perdido información sin darte cuenta.
Estrategias para salvar tus repositorios

Si quieres hacer las cosas bien, tienes varias rutas dependiendo de cuánta profundidad busques. Para algo rápido y manual, puedes usar un clon reflejado ejecutando git clone --mirror. Esto descarga absolutamente todo, incluyendo todas las ramas y etiquetas. Si el proyecto es pesado y usas Git LFS (Large File Storage), no olvides ejecutar git lfs fetch --all para que los archivos grandes no se queden en el camino. Una vez tengas todo, lo ideal es comprimirlo en un .zip o .tar.gz y mandarlo a un disco externo o a servicios como Google Drive, Azure Blob Storage o Dropbox.
Para quienes manejan organizaciones con decenas de repositorios, hacer esto a mano es un suicidio. Aquí entran en juego las herramientas de autoservicio del Marketplace de GitHub, que automatizan la descarga y organización de los datos. También existe la opción de usar la API de REST para crear archivos de migración, aunque estos son más para archivar que para restaurar, ya que no hay una forma oficial de volver a meter esos datos en GitHub fácilmente.
El peligro de la era de la IA y los agentes

Hoy en día, el ritmo de trabajo se ha disparado gracias a herramientas como Copilot o Cursor. Ya no hacemos 200 commits al día, sino que los agentes de IA pueden generar miles. Esto significa que un solo error de un script automatizado puede borrar el trabajo de una semana entera en cuestión de segundos. Un agente que haga un force push incorrecto es visto por GitHub como una acción legítima porque está autenticada, así que las protecciones nativas de la plataforma no sirven de nada.
Para evitar una tragedia, una solución profesional debe centrarse en cuatro pilares. Primero, una frecuencia de respaldo agresiva (RPO); hacer copias cada noche es prehistoria, ahora se busca una cadencia horaria. Segundo, una cobertura total que incluya no solo el código, sino también las issues, pull requests, wikis y flujos de GitHub Actions. Tercero, la inmutabilidad, asegurando que el backup esté en un sitio donde un token comprometido no pueda borrarlo todo. Y cuarto, realizar pruebas de restauración trimestrales, porque un backup que no ha sido probado es solo una ilusión.
Soluciones para entornos Enterprise

Si usas GitHub Enterprise Server (GHES), la cosa cambia porque existen las Backup Utilities. Este sistema se instala en un servidor independiente y crea instantáneas a través de una conexión SSH segura. Lo bueno es que optimiza el espacio usando vínculos físicos para no duplicar datos que no han cambiado y no requiere ventanas de mantenimiento que paren la producción.
Para montar este sistema, necesitas un host con recursos decentes (unos 4 vCPUs y 8 GB de RAM) y un almacenamiento que sea cinco veces mayor que el de la instancia principal. La restauración se hace mediante el comando ghe-restore, pero hay que tener ojo con las versiones: solo puedes restaurar datos de hasta dos versiones anteriores. Si intentas saltar demasiadas versiones, el sistema te dará un error y tendrás que hacer actualizaciones intermedias.
Para que la restauración de una instancia Enterprise sea exitosa, es obligatorio poner la instancia en modo de mantenimiento y, si usas alta disponibilidad, ejecutar ghe-repl-teardown para limpiar los UUIDs obsoletos. Una vez recuperados los datos, hay que reconfigurar manualmente las redes y volver a registrar los ejecutores de GitHub Actions, ya que los tokens antiguos quedan invalidados durante el proceso.
Tener una estrategia de respaldo robusta implica entender que el código es solo una parte del puzzle y que la configuración, el historial y la metadata son igual de valiosos. Combinar clones reflejados, herramientas de automatización y, en casos corporativos, utilidades de snapshot, permite mitigar los riesgos de los errores humanos y los fallos de los agentes de IA, garantizando que la operatividad de la empresa no dependa de un solo proveedor de servicios.