Após dois meses de intenso trabalho, a comunidade de desenvolvimento de O Git apresenta a versão 2.51 do Git, uma atualização que Reúne 506 mudanças, das quais participaram 91 desenvolvedores, dos quais 21 contribuíram pela primeira vez.
Esta versão apresenta melhorias projetadas para melhorar o desempenho e simplificar o gerenciamento de repositórios, incluindo otimizações de desempenho para git-push e git-fetch, bem como diversas alterações em direção à nova ramificação 3.x.
Novos recursos principais do Git 2.51
Um dos destaques do Git 2.51 é o Otimizando os comandos git push e git fetch em repositórios com um grande número de referências. A chave para essa melhoria está na atualização em lote, que processa vários links em uma única transação, em vez de individualmente.
Graças a esta otimização, O backend reftable agora supera o backend de arquivos tradicional.Em testes com repositórios contendo até 10 referências, o desempenho do git fetch aumentou em 000x para reftable e 22x para arquivos, enquanto o git push melhorou em 1.25x e 18x, respectivamente.
Outra inovação importante é o iIntrodução dos chamados pacotes cruft, projetado para armazenar objetos inacessíveis que não estejam vinculados a ramificações ou tags. Esses objetos, que antes estavam dispersos, agora pode ser gerenciado em embalagens separadass, o que os torna mais fáceis de controlar e reduz o tamanho dos índices de vários pacotes (MIDX).
com o nova configuração repack.MIDXMustContainCruft, o Git evita incluir esses objetos nos índices principaisEm testes no GitHub, essa configuração reduziu o tamanho do índice em 38%, acelerou as gravações em 35% e melhorou as leituras em 5%.
Nova abordagem para empacotamento de objetos
El O comando git pack-objects incorpora a opção –path-walk, que introduz um método inovador para reorganizar arquivos de embalagem. Em vez de processar objetos com base em seus hashes, o Git agora pode iterar entre eles com base no caminho do arquivo, compactando aqueles que compartilham o mesmo local. Essa abordagem elimina a necessidade de pré-classificar objetos e resulta em arquivos de compactação menores e mais eficientes.
Com esta versão também Um novo formato para troca de estados e índices de árvores de trabalho criados com o Git Stash foi padronizado.. Agora é possível exportar e importar stashes como branches ou tags, facilitando a movimentação de estados de um sistema para outro.
Por exemplo:
git stash export --to-ref refs/stashes/mi-stash git push origem refs/stashes/mi-stash git fetch origem '+refs/stashes/*:refs/stashes/*' git stash import refs/stashes/mi-stash
Melhorias nos comandos clássicos
Vários Os comandos Git receberam atualizações relevantes:
- git cat-file agora relata objetos e submódulos ausentes, mostrando identificadores em vez de apenas marcar como “ausentes”.
- O git log se beneficia das otimizações do filtro Bloom, acelerando pesquisas com múltiplos caminhos de arquivo.
- Os comandos git switch e git restore, considerados experimentais desde 2019, finalmente estão estabilizados como alternativas modernas ao git checkout.
- O comando git whatchanged, equivalente a git log –raw, está obsoleto e será removido no Git 3.0.
- git for-each-ref recebe a opção –start-after, que junto com –count permite a paginação da saída.
- git merge e git pull agora incluem a opção –compact-summary, que fornece um formato de resumo mais conciso.
Suporte C99 e novas regras de contribuição
O Git continua adaptando seu código às características do padrão C99. Embora um compilador compatível seja necessário desde 2021, os desenvolvedores estão agindo com cautela para manter a compatibilidade com compiladores que o implementam apenas parcialmente.
Além disso, uma mudança significativa foi introduzida na política de contribuição: Os patches agora podem ser enviados sob um pseudônimo, uma decisão alinhada às regras do kernel Linux e projetada para oferecer maior flexibilidade aos colaboradores.
Olhando para o Git 3.0
El A equipe de desenvolvimento também atualizou o roteiro para o Git 3.0., onde duas mudanças importantes se destacam: o uso padrão do SHA-256 como identificador de objeto e a adoção do formato reftable para armazenar referências de ramificação e tags. Essas melhorias visam aumentar a segurança e a eficiência em repositórios cada vez maiores e mais complexos.
fonte: https://lore.kernel.org