3 pontos por xguru 2025-03-25 | Ainda não há comentários. | Compartilhar no WhatsApp
  • bundle-uri é um novo recurso do Git que baixa arquivos em cache para pré-preencher os dados do projeto e depois reduzir o complexo processo de fetch com o servidor
  • Em geral, o comando git clone negocia com o servidor e baixa os dados necessários → isso pode ser ineficiente
  • bundle-uri busca dados iniciais em cache a partir de um CDN e depois atualiza apenas o estado mais recente no servidor → pode economizar tempo

O clone fica mais rápido?

Yes? - Pode ficar mais rápido

  • Ao usar a opção de arquivo local, a velocidade do clone aumenta bastante
  • Em sistemas de arquivos montados em VM ou ao usar arquivos de bundle em cache na nuvem, a sincronização pode ser mais rápida

No? - Pode ficar mais lento

  • Parecia que baixar os mesmos dados de um CDN seria mais rápido, mas na prática ficou mais lento
  • Resultado do experimento: o clone com bundle foi mais lento que o clone normal
    • Clone normal: 2 min 36 s
    • Clone com bundle: 3 min 20 s
  • Surgiu um problema em que objetos já baixados no bundle eram baixados novamente

Maybe? - Talvez

  • O problema ocorre porque o Git lê apenas refs/heads (referências de branch) do arquivo de bundle
  • Como as demais referências são ignoradas, o servidor acaba baixando dados adicionais
  • Se o código do Git for alterado para copiar todas as referências, a velocidade do clone melhora
    • Tempo de clone após a correção: 2 min 19 s (mais rápido que os 2 min 36 s originais)
    • Número de objetos baixados adicionalmente: 43.877 (cerca de 1% do total)

Como corrigir e aplicar o patch

  • Corrigir no código bundle-uri.c do Git o trecho que ignora referências além de refs/heads
  • Depois da mudança, todas as referências passam a ser copiadas → melhora na velocidade do clone
  • Essa correção foi um patch mínimo com 6 caracteres alterados

Vale a pena usar esse recurso?

possibly - talvez ajude

  • Em plataformas como GitHub e GitLab, há uma grande vantagem por reduzir a carga de CPU no servidor
    • Em vez de calcular diretamente o packfile no servidor, isso pode ser tratado via CDN → economia de recursos no servidor
  • Casos em que também pode ser útil para usuários individuais:
    • Quando é preciso repetir grandes clones em um servidor Git interno da empresa
    • Quando sistemas de CI/CD exigem clones completos repetidamente

Na prática, há grande chance de isso ser imposto

  • Nos protocolos mais recentes do Git, o servidor pode fornecer ao cliente uma URL de bundle
  • Se o servidor fornecer a URL do arquivo de bundle, o cliente faz o download automaticamente e depois sincroniza
  • Se esse recurso for ativado no GitHub e em outros serviços, o usuário talvez não tenha opção de escolha

Conclusão

  • Usar arquivos de bundle pode acelerar o clone, mas no começo também pode acabar deixando tudo mais lento por causa da forma como o Git processa isso
  • Ao ajustar o código do Git para melhorar o tratamento das referências, a velocidade do clone aumenta
  • Se GitHub, GitLab e outros adotarem esse recurso no futuro, há grande chance de ele passar a ser usado automaticamente pelo cliente

Ainda não há comentários.

Ainda não há comentários.