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.