Git 2.50: Melhorias de desempenho para grandes repositórios e muito mais

git-2.50

Há poucos dias foi anunciado Lançamento da nova versão do projeto Git 2.50, introduzindo mais de 600 mudanças impulsionado por uma comunidade ativa que desta vez incluiu 98 desenvolvedores, incluindo 35 novos colaboradores.

Esta nova versão do Git 2.50 se destaca pela integração de novos comandos (git-diff-pairs), novas funções para limpeza, filtragem e manutenção, a substituição do mecanismo de mesclagem recursiva por ORT, bem como melhorias de desempenho e correções de bugs.

Novos recursos principais do Git 2.50

Nesta nova versão do Git 2.50, um dos novos recursos mais importantes é o otimização no tratamento dos chamados "cruft packs", Ou seja, pacotes de objetos inacessíveis ou não referenciados por branches ou tags. Tradicionalmente, o Git armazenava esses objetos em um único arquivo de pacote grande, o que poderia causar problemas de desempenho ao reempacotar repositórios com muitos desses itens.

Com a nova versão, O Git permite que você divida esses pacotes de cruft em vários arquivos menores, o que reduz o uso do disco e melhora o desempenho de entrada/saída para operações em massa. Além disso, se insira a opção –combine-cruft-below-size, o que permite combinar pequenos pacotes em um de forma mais flexível do que a opção anterior –max-cruft-size, sem impor um limite ao tamanho do arquivo combinado. Este novo recurso é especialmente útil em projetos com objetos órfãos espalhados por vários pacotes.

Outra melhoria destinada aos repositórios de grande porte é o apoio experimental para a atualização incremental de Índices MIDX , os quais Eles armazenam informações sobre objetos em camadas separadas usando arquivos bitmap, o que permite atualizações mais rápidas à medida que novos commits são adicionados. Esse avanço é crucial para repositórios grandes que exigem operações de indexação rápidas sem a necessidade de reconstruir completamente os metadados.

Substituição completa do mecanismo de mesclagem recursiva por ORT

O Git 2.50 introduz uma grande mudança com o remoção permanente do mecanismo de fusão recursiva tradicional. Em vez disso, o uso da TRO está consolidado, tem motor de fusão mais moderno, sustentável e eficiente. O ORT não só oferece uma análise de conflitos mais precisa, como também permite verificar se uma mesclagem é possível sem gerar objetos adicionais. Além disso, o comando merge-tree agora inclui a opção –quiet para uso como um verificador de mesclagem silencioso, sem modificar o repositório.

gitt-diff-pairs: a solução para problemas de escalabilidade

A revisão de código é, sem dúvida, um dos pilares do desenvolvimento colaborativo moderno, e as diferenças entre as revisões desempenham um papel importante nesse processo. Com a chegada do Git 2.50, uma solução projetada para escalabilidade foi introduzida: o novo comando git-diff-pairs.

Tradicionalmente, para obter uma comparação entre duas revisões, você usa um comando como:

git diff HEAD~1 HEAD

Isso gera um patch completo contendo todas as alterações entre as revisões listadas. Embora eficaz em muitos casos, pode ser um problema de desempenho ao lidar com grandes conjuntos de arquivos modificados.

É por isso que o git-diff-pairs foi projetado especificamente para receber entrada bruta diretamente da saída do git diff-tree e gerar os patches correspondentes de forma eficiente e precisa.

O uso é tão simples quanto:

git diff-tree -r -z -M HEAD~ HEAD | git diff-pairs -z

Este comando pega os pares de blobs fornecidos e gera a saída exata do diff, preservando informações contextuais e permitindo que o trabalho seja dividido em lotes menores. Isso abre caminho para o processamento paralelo, melhora a eficiência de recursos e facilita a escalabilidade em ferramentas baseadas em diff, como o GitLab.

Novos recursos para limpeza, filtragem e manutenção

O Git 2.50 inclui diversas ferramentas adicionais projetadas para melhorar a manutenção do repositório:

  • O comando foi adicionado git reflog drop, que permite que você exclua completamente o reflog de um branch específico, ideal para limpar seu histórico de trabalho quando você não precisa mais manter referências anteriores.
  • a opção -filtro cat-file –batch agora está disponível no git, permitindo que você filtre resultados por tipo de objeto.

Além disso, diversas otimizações internas também são destacadas:

  • Melhor uso de links simbólicos, com cache de prefixo e redução de verificações redundantes.
  • Remoção de dependências Perl na documentação e scripts de teste, substituindo-as por funções shell ou implementações C, facilitando a compilação em sistemas com configurações minimalistas.
  • Incluindo um controlador diferença de usuário para análise de diferenças em arquivos .ini.
  • Compatibilidade aprimorada do comando git send-email com servidores SMTP, como o Outlook.

Por fim, se estiver interessado em saber mais sobre o assunto, pode consultar os detalhes no link a seguir