Curso
Git es una herramienta muy utilizada para el control de versiones que ayuda a gestionar proyectos de desarrollo de software, flujos de trabajo de ciencia de datos e incluso repositorios de documentación. Sin embargo, el Git tradicional tiene limitaciones cuando se trata de manejar archivos grandes. Los archivos de gran tamaño se duplicarán con cada confirmación, lo que provocará la saturación del repositorio y ralentizará los flujos de trabajo debido a la necesidad de copiar varias copias de archivos de gran tamaño al extraer los cambios. Por eso, gestionar archivos grandes con Git puede resultar ineficaz por las siguientes razones:
- Gran tamaño del repositorio: Almacenar archivos grandes directamente en un repositorio Git aumenta su tamaño total, haciendo que las operaciones de clonación y obtención sean lentas, especialmente cuando se trabaja en un repositorio remoto que puede requerir subir/descargar archivos.
- Almacenamiento y versionado ineficaces: Cada vez que se modifica un archivo grande, Git almacena una nueva versión en su historial, lo que provoca una rápida hinchazón del repositorio.
- Problemas de rendimiento: Con un repositorio grande, las operaciones Git (por ejemplo, clonar, tirar, empujar) se vuelven significativamente más lentas y requieren más almacenamiento.
En esta guía, echaremos un vistazo en profundidad al Almacenamiento de Archivos Grandes de Git (Git LFS), que es una extensión de Git que te ayuda con los archivos grandes en tu repositorio. Nos permite almacenar de forma más eficaz los cambios en archivos grandes sin duplicar ni almacenar archivos adicionales. Debes utilizarlo siempre que preveas tener archivos binarios de gran tamaño en tu repositorio. Empezaré explicando con más detalle qué es, cómo funciona, cuándo utilizarlo y cómo configurarlo eficazmente.
Si eres nuevo en Git, consulta nuestra guía sobre Cómo aprender Git y Curso de Introducción a Git.
¿Qué es Git LFS?
Git Large File Storage (Git LFS) es una extensión para Git que mejora el manejo de archivos grandes.
Cambia la forma en que Git gestiona la obtención y la clonación, añadiendo funcionalidad a Git para obtener perezosamente datos de un repositorio remoto y añadiendo alguna funcionalidad inteligente de gestión de archivos a Git.
Por lo demás, la experiencia del usuario es perfecta e igual a la de Git normal.
En qué se diferencia Git LFS del seguimiento Git estándar
En Git tradicional, almacenamos todo el historial del repositorio en el directorio .git
. Esto incluye los archivos de texto reales que se han modificado a lo largo del tiempo. Además, se descargan repositorios enteros cuando llamamos a git fetch
o git clone
para que tengamos todos los archivos fácilmente disponibles. Cuando utilizamos Git LFS, cambian algunas cosas.
En primer lugar, Git LFS sustituye los archivos grandes por punteros ligeros a almacenamiento remoto, reduciendo la necesidad de almacenar cada archivo. En segundo lugar, los archivos grandes sólo se descargan al pasar a la rama, lo que significa que sólo descargamos los archivos grandes cuando estamos preparados para trabajar en ellos.
Por último, gestiona el almacenamiento de tu repositorio local para limpiar las versiones antiguas de los archivos y mantener un entorno de trabajo limpio.
¿Cómo funciona Git LFS?
Git LFS sigue un mecanismo de almacenamiento basado en punteros. Como ya hemos dicho, cuando especificas un archivo para el seguimiento LFS, Git LFS lo sustituye por un archivo puntero en el repositorio y también coloca una copia local en la caché.
Cuando empujas confirmaciones, la caché local se actualiza en un almacén remoto (por ejemplo, servidores GitHub, GitLab, Bitbucket LFS). Si hay cambios y pasas por caja, estos cambios actualizan tu caché local para proporcionarte la copia de trabajo más reciente.
Si quieres conocer a fondo uno de los repositorios remotos más populares, GitHub, consulta este curso de Introducción a GitHub.
Utilizar Git LFS tiene muchas ventajas. Mantiene el tamaño de los repositorios pequeño y manejable. También mejora el rendimiento de los equipos que trabajan con archivos grandes. Además, al evitar la duplicación innecesaria de archivos grandes, mantiene manejable el tamaño de tu repositorio local.
Configurar Git LFS
Antes de utilizar Git LFS hay que seguir unos pasos para configurarlo. Es un proceso relativamente sencillo que consiste en instalar la extensión. Si ya tienes repositorios, tendrás que migrarlos. Si estás creando un nuevo repositorio, puedes simplemente iniciar Git LFS.
Instalar Git LFS
Para utilizar Git LFS, debes instalarlo en tu sistema. La forma más sencilla es ir al sitio web git-lfs e instalar los archivos. Una vez hecho esto, ejecuta git lfs install
una vez en tu consola de comandos para inicializar e instalar completamente Git LFS.
Utilizar Git LFS
Una vez instalado, tendrás que asegurarte de que Git LFS está configurado para cada repositorio. Los distintos rastreadores Git remotos (por ejemplo, GitHub frente a Bitbucket) tendrán pasos ligeramente distintos. Lo mejor es seguir los pasos recomendados para tu rastreador remoto Git concreto. A alto nivel, si inicializas un nuevo repositorio, puedes ejecutar git lfs install
en ese repositorio para inicializar los ganchos y luego añadir archivos al seguimiento. Si tienes un repositorio existente, puedes utilizar git lfs migrate
y luego seguir los procedimientos de limpieza del directorio .git:
git reflog expire --expire-unreachable=now --all
git gc --prune=now
Utilizar Git LFS en un proyecto
Repasemos algunos de los usos de Git LFS en un proyecto. Cubriremos los pasos para rastrear, confirmar, clonar y extraer archivos grandes de un repositorio Git LFS.
Seguimiento de archivos grandes (git lfs track)
Para empezar a rastrear tipos de archivo concretos, podemos utilizar el comando git lfs track
. Por ejemplo, si quisiera rastrear archivos CSV, escribiría el comando como: git lfs track "*.csv"
. Esto también añade información a nuestro archivo .gitattributes
para asegurarnos de que estamos utilizando Git LFS para este archivo en concreto. Ahora debemos empujar primero nuestro archivo .gitattributes
para asegurarnos de que rastreamos correctamente los archivos LFS.
git add .gitattributes
git commit -m "Adding LFS .gitattributes"
git push origin main
Añadir y confirmar archivos grandes
Después de añadir el seguimiento, puedes añadirlo y confirmarlo como de costumbre:
git add largefile.csv
git commit -m "Adding large file with Git LFS"
git push origin main
Entre bastidores, Git LFS almacena el archivo por separado y lo sustituye por un puntero en el repositorio. Debería ser una experiencia bastante fluida.
Clonar repositorios con Git LFS (git lfs clone)
Si tienes una versión más reciente de Git (>= 2.3.0), el comando git clone debería funcionar automáticamente tanto para tus archivos LFS como para los que no lo son. Si utilizas una versión anterior de Git, tendrás que utilizar el comando específico git lfs clone. Esto funciona de forma diferente a tu clonación habitual, porque consultará la información del puntero de los archivos grandes y sólo clonará la copia de trabajo de cada archivo grande. Para más información sobre la clonación en Git, consulta el siguiente tutorial sobre Git Clone Branch.
Extraer archivos grandes (git lfs pull)
Si quieres obtener y comprobar los archivos LFS grandes de tu repositorio, puedes utilizar la función git lfs pull
. Esto es independiente de un simple git pull
que sólo extraerá los archivos git.
Aquí tienes un ejemplo de flujo de trabajo:
git checkout main # check out your main branch
git pull # pull latest git files from the remote, for this branch
git lfs pull # pull latest git lfs files from the remote, for this branch
Buenas prácticas para utilizar Git LFS
Aunque Git LFS es una gran solución, puede conllevar su propia serie de problemas y no está diseñado para ser una solución universal. Asegúrate de seguir las siguientes buenas prácticas cuando utilices Git LFS para sacarle el máximo partido:
- Utiliza Git LFS sólo para archivos binarios grandes, no para código o archivos de texto pequeños.
- Poda regularmente los archivos innecesarios utilizando:
git lfs prune
- Evita rastrear directorios enteroslo que puede provocar problemas de rendimiento e hinchazón
- Asegúrate de que todos los colaboradores tienen instalado Git LFS para evitar que falten archivos.
Si sigues estas directrices generales, entonces Git LFS será una gran herramienta para ti.
Problemas comunes y cómo solucionarlos
Como Git LFS es una extensión de Git, viene con su propia serie de problemas. Esto es especialmente cierto porque depende de repositorios remotos que tienen sus propios problemas. Aquí tienes algunos problemas comunes que puedes encontrarte al utilizar Git LFS y sus soluciones.
Problemas de autenticación Git LFS
Existen numerosas formas de encontrarte con problemas de autenticación con Git LFS. Para asegurarte de que tienes las credenciales correctas, comprueba lo siguiente:
- Utiliza la configuración SSH correcta con
git config lfs.url ssh://
- Comprueba que tienes acceso de lectura/escritura a la rama padre, ya que Git LFS a menudo rastrea a la rama padre
- Intenta hacer un fetch/clone limpio desde el repositorio remoto por completo
Si sigues teniendo problemas y no eres el administrador, consulta con quien sea el propietario del proyecto para ver si puede ayudarte con los permisos.
Límites y cuotas de almacenamiento de archivos grandes
Los servicios pueden tener presupuestos sobre el almacenamiento Git LFS. Por ejemplo, GitHub tiene un límite de 2 GB para los usuarios gratuitos y Pro, con un límite de 5 GB por archivo para los usuarios de la nube Enterprise. Asegúrate de que no subes archivos mayores que el límite de tu servicio para evitar errores.
Migrar repositorios existentes para utilizar Git LFS
Si un repositorio ya contiene archivos grandes, migralos utilizando:
git lfs migrate import --include="*.filetype"
Esto sustituye retroactivamente los archivos grandes por punteros LFS.
Conclusión
Git LFS es una herramienta esencial para gestionar archivos de gran tamaño de forma eficiente, manteniendo los repositorios ligeros y de alto rendimiento. Aprovechando Git LFS, los desarrolladores pueden gestionar adecuadamente los archivos más grandes de sus repositorios. Siempre que sigas las mejores prácticas para minimizar el bloat, LFS será de gran ayuda para tu seguimiento de archivos. Si tienes más interés en aprender sobre Git, prueba los siguientes recursos:
Git LFS Preguntas frecuentes
¿Qué ocurre si clono un repositorio con archivos Git LFS?
Ejecutando git clone
en versiones más recientes de Git obtendrás automáticamente el repositorio y los punteros LFS. Si utilizas una versión antigua de Git, tendrás que ejecutar git lfs pull
para descargar los archivos grandes reales. Otra posibilidad es utilizar git lfs clone
, que lo hace automáticamente.
¿Cómo puedo comprobar qué archivos son rastreados por Git LFS?
Ejecuta git lfs track
para ver patrones de archivos rastreados, y git lfs ls-files
para listar archivos reales almacenados mediante LFS.
¿Qué pasa si me quedo sin almacenamiento Git LFS en GitHub u otro servicio de alojamiento?
Servicios como GitHub imponen límites de almacenamiento. Puedes gestionar el almacenamiento con git lfs prune
, comprar más espacio o utilizar una solución alternativa de almacenamiento externo.
¿Puedo dejar de utilizar Git LFS después de activarlo?
Sí, pero tienes que volver a migrar tus archivos a Git estándar utilizando git lfs migrate export --include="*.filetype"
para eliminar el seguimiento LFS.