13 pontos por GN⁺ 2025-08-16 | Ainda não há comentários. | Compartilhar no WhatsApp
  • O projeto Git começou recentemente, de forma oficial, a resolver diretamente o problema de gerenciamento de arquivos grandes
  • O Git LFS é uma solução paliativa que impõe vários custos e dependência de fornecedor aos usuários
  • Com o recurso recente de partial clone, o próprio Git já consegue substituir a maior parte do papel do LFS
  • No futuro, uma nova solução chamada large object promisor também está sendo preparada para integração ao Git oficial
  • Com essas mudanças, a solução definitiva para o gerenciamento de arquivos grandes tende a convergir não para extensões externas, mas para o próprio Git

O problema dos arquivos grandes no Git e as mudanças em curso

  • Se existe uma grande nêmesis do Git, ela é justamente os arquivos grandes
  • Arquivos grandes incham os repositórios Git, reduzem a velocidade do git clone e também afetam negativamente a maioria dos ambientes de hospedagem

O surgimento do Git LFS e suas limitações

  • Em 2015, o GitHub lançou o Git LFS para contornar o problema dos arquivos grandes
  • Mas o próprio Git LFS adiciona nova complexidade e custos de armazenamento
  • A comunidade Git vinha refletindo discretamente sobre a causa raiz do problema dos arquivos grandes e, nas releases oficiais mais recentes do Git, começou a surgir uma nova direção para gerenciar arquivos grandes sem LFS

O que já dá para fazer hoje: substituir o Git LFS por partial clone

  • Como funciona o partial clone

    • Git LFS: os arquivos grandes ficam fora do repositório, e o trabalho acontece baixando apenas os arquivos necessários
    • Git partial clone (introduzido em 2017):
      • clona excluindo blobs acima de um tamanho desejado com a opção --filter
      • baixa do servidor apenas o arquivo grande necessário, somente quando preciso
        > Ao usar partial clone, não é necessário baixar previamente [ativos binários grandes] durante o clone e o fetch, o que reduz o tempo de download e o uso de disco
        > - Partial Clone Design Notes, git-scm.com
  • Semelhanças entre partial clone e LFS

    • 1. Capacidade mínima no checkout: recebe apenas a versão mais recente e omite todo o histórico do arquivo
    • 2. Clonagem rápida: como não há transferência de arquivos grandes, o clone é mais veloz
    • 3. Configuração rápida: ao contrário do shallow clone, permite acesso ao histórico completo do projeto
  • Exemplo de uso do partial clone

    • Caso real de velocidade de clonagem e uso de disco em um repositório com muito histórico de arquivos PNG grandes:
      • com clone normal, quase 4 minutos e 1,3 GB ocupados
      • com partial clone e limite de blob de 100 KB, clonagem em 6 segundos e 49 MB ocupados
      • em relação ao original, melhora de 97% na velocidade de clonagem e redução de 96% no tamanho do checkout
  • Limitações do partial clone

    • Quando os dados filtrados são necessários (por exemplo, git diff, git blame, git checkout), o Git solicita os arquivos ao servidor
    • Essa é a mesma característica do Git LFS
    • Na prática, é raro haver necessidade de usar blame em arquivos binários

Os problemas do Git LFS

  • Alta dependência de fornecedor: a implementação do GitHub suporta apenas seus próprios servidores, gerando cobrança e dependência
  • Questão de custo: para armazenar 50 GB, o GitHub LFS custa US$ 40 por ano, enquanto o Amazon S3 custa US$ 13
  • Difícil de reverter: depois de migrar para LFS, não é possível voltar ao estado anterior sem reescrever o histórico
  • Custo contínuo de configuração: todos os colaboradores precisam instalar o LFS; se não instalarem, verão arquivos de metadados no lugar dos arquivos reais, o que gera confusão

Perspectivas futuras: Large Object Promisor

  • Arquivos grandes também geram problemas de custo para plataformas de hospedagem como GitHub e GitLab
  • O Git LFS reduz custos do servidor ao descarregar arquivos grandes para uma CDN
  • O que é Large Object Promisor?

    • No início deste ano, o Git fez merge oficial de um recurso chamado large object promisor
    • Esse recurso reduz a carga de armazenamento do lado do servidor de forma semelhante ao LFS, mas reduz bastante a complexidade para o usuário
      > Esse esforço tem como objetivo melhorar o trabalho no lado do servidor, especialmente com blobs grandes que já estão compactados em formato binário
      > É uma solução alternativa ao Git LFS
      > – Large Object Promisors, git-scm.com
  • Como funciona

    • 1. O usuário faz push de arquivos grandes para o host Git
    • 2. O host descarrega esses arquivos grandes para um promisor de backend
    • 3. No clone, o host Git fornece ao cliente as informações do promisor
    • 4. Quando necessário, o cliente baixa automaticamente os arquivos grandes a partir desse promisor
  • Situação atual de adoção e desafios

    • O promisor para objetos grandes ainda está em desenvolvimento, e parte do código foi integrada ao Git em março de 2025
    • Implementações adicionais e discussões sobre issues em aberto estão em andamento no GitLab e em outros lugares
    • Ainda será preciso tempo até a adoção em massa
    • Por enquanto, a dependência do Git LFS para armazenar arquivos grandes continua inevitável
    • Quando o promisor se popularizar, a expectativa é que até o GitHub passe a permitir upload de arquivos acima de 100 MB

Conclusão: o futuro dos arquivos grandes no Git é o próprio Git

  • O projeto Git continua pensando sem parar no problema dos arquivos grandes por você
  • No momento, ainda é necessário usar o Git LFS
  • Porém, com a evolução de partial clone e large object promisors, o Git LFS tende a se tornar gradualmente desnecessário, e em breve deve chegar a era em que será fácil gerenciar arquivos grandes apenas com Git
  • No futuro, a última barreira para usar arquivos grandes talvez seja apenas a ideia de colocar uma biblioteca de MP3 dentro do Git

Ainda não há comentários.

Ainda não há comentários.