-
Notifications
You must be signed in to change notification settings - Fork 0
Git LFS: manejar archivos grandes en git
Guía rápida para trabajar con archivos pesados en los repos del HackLab sin inflar el historial. Si vas a subir PDFs, videos o comprimidos a un repo, esto es lo que necesitas saber.
Git fue hecho para código, que es texto. Guarda cada versión de cada archivo en el historial, y para texto eso funciona muy bien. El problema aparece con los binarios grandes, como PDFs, videos, comprimidos o datasets. Cada vez que uno de esos cambia, git guarda una copia completa, y el repo se infla rápido. Clonarlo se vuelve lento y pesado para todos.
Git LFS (Large File Storage) resuelve eso. Guarda los archivos grandes en un lugar aparte y dentro de git deja solo un "puntero", que es un archivito de texto que dice dónde está el archivo real. Así el historial se mantiene liviano y los archivos grandes se bajan solo cuando se necesitan.
Úsalo para binarios que pesan o que se van acumulando: imágenes pesadas, PDF, videos, audio, comprimidos (.zip), archivos de diseño (.psd, .ai), modelos y datasets.
No lo necesitas para código ni para texto. Los .md, .py, .js y demás van bien en git normal.
Se hace una sola vez por computador.
En mac:
brew install git-lfsEn Linux (Debian o Ubuntu):
sudo apt install git-lfsEn Windows normalmente ya viene incluido con Git for Windows. Si no lo tienes, descárgalo de git-lfs.com.
Después de instalarlo, actívalo para tu usuario (también una sola vez):
git lfs installTrabajas casi igual que con git normal. Lo único distinto es decirle a LFS qué tipos de archivo manejar.
1. Dile a LFS qué archivos rastrear
Dentro del repo, por tipo de archivo:
git lfs track "*.pdf"
git lfs track "*.png"
git lfs track "*.zip"Esto crea o actualiza un archivo llamado .gitattributes, donde queda anotado qué patrones maneja LFS.
2. Confirma el .gitattributes primero
Esto importa. El .gitattributes tiene que entrar antes que los archivos grandes, o no quedan capturados por LFS.
git add .gitattributes
git commit -m "Configura git lfs"3. Ahora sí, agrega los archivos como siempre
git add mi-archivo.pdf
git commit -m "Agrega documento"
git push4. Verifica que quedaron en LFS
git lfs ls-filesSi tus archivos aparecen en esa lista, quedó bien.
Si tienes git-lfs instalado, un git clone normal baja los archivos reales sin que hagas nada más.
Si clonaste y ves punteros (archivos de texto raros en vez del PDF o la imagen), es porque te faltaba LFS. Instálalo y corre:
git lfs pullY bajan los archivos de verdad.
Ojo con esto. Rastrear un tipo de archivo solo afecta lo que subas de ahí en adelante. Lo que ya estaba en el historial no se mueve solo a LFS.
Si necesitas pasar a LFS archivos que ya habías subido antes, usa:
git lfs migrate import --include="*.pdf"Esto reescribe el historial, así que hazlo con cuidado y coordinando con quien más use el repo. Después toca forzar el push y todos tienen que volver a clonar o resincronizar.
-
git lfs track "*.ext"— empezar a manejar un tipo de archivo -
git lfs untrack "*.ext"— dejar de manejarlo -
git lfs ls-files— ver qué archivos están en LFS -
git lfs status— ver el estado de los archivos LFS -
git lfs pull— bajar los archivos reales -
git lfs migrate import --include="*.ext"— mover a LFS archivos ya existentes
-
Subiste el archivo y no quedó en LFS. Casi siempre es porque agregaste el binario antes de confirmar el
.gitattributes. El orden correcto es: rastrear, confirmar el.gitattributes, y después agregar los archivos. -
Ves punteros en vez de los archivos. Te falta git-lfs instalado, o no corriste
git lfs pull. -
Algo que construye desde el repo (un sitio, un pipeline de CI) sale con archivos rotos. Ese proceso también necesita bajar los archivos de LFS. Si usas GitHub Actions, el paso de checkout debe traer LFS con la opción
lfs: true.