Watch at EaseHistorias. Respuestas. Perspectiva.

Tecnología · GUÍA PRÁCTICA

¿Git dice “object file is empty”? Conserva el OID antes de borrar nada

Un loose object de cero bytes es evidencia del repositorio, no basura. Detén las escrituras, conserva el OID completo y .git, inventaría el daño y recupera el objeto exacto o rescata el trabajo local.

Diagrama original con parada de escrituras, conservación de OID, inventario fsck, clasificación y búsqueda de una copia fiable.
Ilustración original: conserva el objeto y la evidencia antes de borrar. Watch at Ease

“object file … is empty” significa que existe una ruta de objeto suelto, pero Git no puede leer un objeto válido. Trata el OID completo y el repositorio como evidencia; no empieces borrando vacíos, con reset --hard ni sustituyendo todo .git.

Detén las escrituras, copia el árbol de trabajo y .git en otro almacenamiento, registra el OID exacto y haz un inventario de solo lectura. La recuperación depende del tipo y alcance del objeto y de si existe una copia fiable en remoto, clon independiente, alternates o copia de seguridad.

Detén las escrituras y conserva pruebas

Detén editores, integraciones Git del IDE, sincronización y mantenimiento. Guarda el error completo, ruta, OID, status disponible y síntomas de caída, energía, disco lleno o sistema de archivos.

Copia el árbol y .git a otro almacenamiento. Conserva la ruta de cero bytes bajo su OID completo. En un repositorio bare del servidor, detén escrituras y usa el proceso de mantenimiento y copias de la plataforma.

Haz inventario antes de reparar

Ejecuta git fsck --full en una copia conservada; guarda también --no-reflogs si necesitas comparar sin reflogs como raíces. Separa missing, bad, dangling y unreachable.

Revisa alternates, packs, refs y reflogs, y determina si falla uno o varios objetos. No ejecutes gc, prune, reset --hard ni borrado masivo mientras ignores el límite del daño.

Clasifica el OID y busca una copia fiable

Usa los enlaces de fsck para saber si es blob, tree, commit o tag. En un blob, el tree que lo referencia y git ls-tree pueden revelar la ruta; commits y trees son más difíciles de reconstruir.

Comprueba el OID completo en un clon independiente, remoto, bundle, backup y alternate. Un fetch normal solo sirve si el remoto posee el objeto y ya conservaste la historia solo local.

Elige la recuperación menos destructiva

Si existe el objeto exacto en una fuente fiable, restáuralo mediante una ruta consciente de Git o desde backup, verifica el OID y repite fsck. No reemplaces todo .git con otro repositorio.

Si puedes reconstruir un blob, ejecuta git hash-object sobre una copia y escribe solo si coincide exactamente. Si no, rescata el árbol de trabajo en un clon nuevo y conserva el repositorio dañado.

Verifica repositorio y almacenamiento

La reparación termina cuando fsck ya no muestra el objeto alcanzable perdido o corrupto, los refs resuelven, la historia y cambios siguen presentes y un clon independiente hace checkout. Solo dangling puede ser normal.

Si la corrupción vuelve, aparecen más objetos o hay errores de E/S, memoria, energía o filesystem, detén la cirugía y revisa el almacenamiento. Conserva copias hasta verificar todos los cambios locales.

Árbol original que separa reemplazo exacto, rescate del árbol y escalado por daños múltiples o de almacenamiento.
Ilustración original: reemplaza solo cuando el objeto y la copia fiable están probados. Watch at Ease