13 puntos por GN⁺ 2025-08-16 | Aún no hay comentarios. | Compartir por WhatsApp
  • El proyecto Git recientemente comenzó oficialmente a resolver por sí mismo el problema de gestionar archivos grandes
  • Git LFS es una solución temporal que genera varios costos y dependencia del proveedor para los usuarios
  • Con la función reciente de partial clone, ahora Git por sí solo puede reemplazar la mayor parte de lo que hacía LFS
  • Hacia adelante, también se está preparando la integración en Git oficial de una nueva solución llamada large object promisor
  • Con estos cambios, todo apunta a que la solución definitiva para gestionar archivos grandes no será una extensión externa, sino Git mismo

El problema de los archivos grandes en Git y lo que está cambiando

  • Si Git tiene un mayor enemigo, son precisamente los archivos grandes
  • Los archivos grandes hinchan el repositorio, ralentizan git clone y también afectan negativamente a la mayoría de los entornos de hosting

La llegada de Git LFS y sus límites

  • En 2015, GitHub lanzó Git LFS para esquivar el problema de los archivos grandes
  • Pero Git LFS en sí mismo añadió nueva complejidad y costos de almacenamiento
  • La comunidad de Git ha estado pensando silenciosamente en el problema de fondo de los archivos grandes y, recientemente, las versiones oficiales de Git han comenzado a mostrar una nueva dirección para gestionarlos sin LFS

Lo que ya se puede hacer hoy: reemplazar Git LFS con partial clone

  • Cómo funciona partial clone

    • Git LFS: los archivos grandes se dejan fuera del repositorio y se trabaja descargando solo los archivos necesarios
    • Git partial clone (introducido en 2017):
      • clona excluyendo blobs por encima del tamaño deseado con la opción --filter
      • solo descarga desde el servidor ese archivo grande cuando hace falta
        > Partial clone puede reducir el tiempo de descarga y el uso de disco porque evita descargar por adelantado [large binary assets] durante Clone y Fetch
        > - Partial Clone Design Notes, git-scm.com
  • Qué comparten partial clone y LFS

    • 1. Checkout mínimo: recibe solo la versión más reciente y omite el historial completo del archivo
    • 2. Clonado rápido: como no hay transferencia de archivos grandes, clone es más veloz
    • 3. Configuración rápida: a diferencia de shallow clone, permite acceder al historial completo del proyecto
  • Ejemplo de uso de partial clone

    • Caso real de velocidad de clonado y espacio en disco al clonar un repo con mucho historial de archivos PNG grandes:
      • con un clone normal tarda casi 4 minutos y ocupa 1.3GB
      • con partial clone y un límite de blobs de 100KB, se clona en 6 segundos y ocupa 49MB
      • frente al original, mejora del 97% en velocidad de clonado y reducción del 96% en tamaño del checkout
  • Límites de partial clone

    • Cuando se necesita un dato filtrado (por ejemplo, git diff, git blame, git checkout), Git solicita el archivo al servidor
    • Esta es la misma característica que tiene Git LFS
    • En la práctica, rara vez hace falta usar blame sobre archivos binarios

Los problemas de Git LFS

  • Alta dependencia del proveedor: la implementación de GitHub solo soporta sus propios servidores, lo que genera cobros y dependencia
  • Problema de costos: almacenar 50GB en GitHub LFS cuesta $40 al año, frente a $13 en Amazon S3
  • Difícil de revertir: una vez que se migra a LFS, no se puede volver atrás sin reescribir el historial
  • Costo continuo de configuración: todos los colaboradores deben instalar LFS; si no lo hacen, ven archivos de metadatos en lugar de los archivos reales, lo que genera confusión

Lo que viene: Large Object Promisor

  • Los archivos grandes también generan problemas de costos para las plataformas de hosting como GitHub y GitLab
  • Git LFS reduce costos del servidor descargando archivos grandes a un CDN
  • ¿Qué es Large Object Promisor?

    • A inicios de este año, Git hizo merge oficialmente de una función llamada large object promisor
    • Esta función reduce la carga de almacenamiento del lado del servidor de forma similar a LFS, pero disminuye mucho la complejidad para el usuario
      > Este esfuerzo tiene como objetivo mejorar el trabajo del lado del servidor, especialmente con blobs grandes ya comprimidos en formato binario
      > Es una solución alternativa a Git LFS
      > – Large Object Promisors, git-scm.com
  • Cómo funciona

    • 1. El usuario hace push de archivos grandes al host de Git
    • 2. El host deriva esos archivos grandes a un promisor de backend
    • 3. Durante el clone, el host de Git entrega al cliente la información del promisor
    • 4. Cuando hace falta, el cliente descarga automáticamente los archivos grandes desde ese promisor
  • Estado actual de adopción y retos

    • El promisor para objetos grandes sigue en desarrollo y parte del código fue mergeado en Git en marzo de 2025
    • En GitLab y otros proyectos se sigue discutiendo la implementación adicional y los problemas pendientes
    • Todavía falta tiempo para una adopción masiva
    • Por ahora, sigue siendo inevitable depender de Git LFS para almacenar archivos grandes
    • Cuando el promisor se masifique, también se espera que GitHub permita subir archivos de más de 100MB

Conclusión: el futuro de los archivos grandes en Git es Git

  • El proyecto Git sigue pensando constantemente en el problema de los archivos grandes por ti
  • Por ahora, todavía sigue siendo necesario usar Git LFS
  • Pero a medida que evolucionen partial clone y large object promisors, Git LFS se volverá cada vez menos necesario, y pronto llegará una era en la que los archivos grandes podrán gestionarse fácilmente solo con Git
  • En el futuro, el último obstáculo para usar archivos grandes en Git será únicamente la idea de meter una biblioteca de MP3 dentro del repositorio

Aún no hay comentarios.

Aún no hay comentarios.