O Git 2.51 chega com MIDX sem cruft, pacotes de caminho, importação/exportação de stash e trabalho de base 3.0

Última atualização: 08/21/2025
  • Novos índices multipack sem crostas com repack.MIDXMustContainCruft reduza o tamanho do MIDX e acelere as leituras.
  • Reembalagem de caminho-caminhada (--path-walk) produz embalagens menores com tempos competitivos.
  • O formato de intercâmbio de stashes permite exportar/importar stashes como referências entre máquinas.
  • Progresso em direção ao Git 3.0: SHA-256 e padrões reftable sinalizados; aprimoramento da interface do usuário e das ferramentas.

Visual da versão 2.51 do Git

O Git 2.51 foi lançado, trazendo um amplo conjunto de melhorias de mais de 91 colaboradores (incluindo 21 novatos) e um esforço contínuo para modernizar a ferramenta sem interromper os fluxos de trabalho estabelecidos.

Esta versão se concentra em atualizações práticas—do armazenamento e empacotamento à usabilidade e postura de segurança—ao mesmo tempo em que preparamos os trilhos para as mudanças programadas para o Git 3.0.

Índices multipack sem crostas

O Git armazena dados como objetos (blobs, árvores, commits) livremente ou dentro de packfiles, com índices de pacotes mapeando hashes para offsets. Índices multipacote (MIDX) permitem que o Git indexe objetos em vários pacotes, transformando muitas pesquisas em uma única O(log N) pesquisa e também alimentam bitmaps de acessibilidade para verificações rápidas de contenção.

A ruga foi feita de pacotes de sujeira, onde objetos inacessíveis residem fora do MIDX. Se um objeto que antes era inacessível se torna acessível a partir de um commit de bitmap, mas existe apenas em um pacote de cruft, ele não tem posição de bit — bloqueando a geração de bitmap.

O Git 2.51 altera o comportamento de reempacotamento para que, ao gerar novos pacotes não-cruft, ele duplique objetos (e seus ancestrais) cuja única outra cópia reside em um pacote cruft. Repetir isso garante que o conjunto não-cruft seja fechado sob acessibilidade, permitindo uma cobertura de bitmap consistente.

Uma nova configuração torna isso fácil: repack.MIDXMustContainCruft usa a lógica de reempacotamento atualizada para manter os pacotes de cruft fora do MIDX. Em uso em larga escala, os arquivos MIDX diminuíram cerca de 38%, foram gravados ~35% mais rápido e melhoraram o desempenho de leitura em cerca de 5%.

Pacotes menores com caminhada no caminho

O Git 2.49 introduziu um hash de nome melhor para ordenar objetos durante a seleção delta, reduzindo a dependência dos últimos 16 caracteres do caminho e considerando a estrutura do diretório para um pareamento mais inteligente.

O Git 2.51 vai além com um novo modo de coleta "path walk" para reempacotamento. Em vez de emitir objetos estritamente em ordem de revisão, o Git agrupa e emite todos os objetos de um determinado caminho, eliminando a necessidade de heurísticas de hash de nome.

O resultado são arquivos de pacote mais enxutos com oportunidades delta aprimoradas entre objetos de mesmo caminho e tempos competitivos com a travessia clássica. Você pode tentar com o novo --path-walk opção ao reembalar.

Visão geral dos recursos do Git 2.51

Formato de troca de estoque

Se você usar git stash freqüentemente, você sabe que tradicionalmente modela cada stash como três commits (preparados, não preparados e um pai sintético que os une) armazenados em refs/stash, tornando a migração entre máquinas difícil.

O Git 2.51 adiciona uma representação encadeada onde cada entrada do estoque inclui parentesco adicional vinculado à entrada do estoque anterior, formando um histórico linear que é mais fácil de mover e gerenciar.

Novos subcomandos desbloqueiam a portabilidade: você pode exportar stashes para uma única referência e enviá-los/pull-los como qualquer branch ou tag e, então, importá-los em outra máquina.

Fluxo de trabalho de exemplo:

$ git stash export --to-ref refs/stashes/my-stash
$ git push origin refs/stashes/my-stash

$ git fetch origin '+refs/stashes/*:refs/stashes/*'
$ git stash import refs/stashes/my-stash

Notas de desempenho para grandes repositórios

As atualizações de referência são melhor dimensionadas Em repositórios com um número muito grande de referências, graças a atualizações em lote que reduzem a sobrecarga transacional. Em cenários com aproximadamente 10,000 referências, os ganhos relatados incluem acelerações drásticas — especialmente com o backend reftable — em operações como busca e envio.

Ferramentas e polimento UX

  • git cat-file é mais informativo para caminhos de submódulos em --batch-check modo, relatando uma entrada de submódulo em vez de apenas “faltando”.
  • Os filtros Bloom de caminho alterado agora ajudam com múltiplas especificações de caminho (por exemplo, git log -- a b), expandindo o alcance da otimização.
  • git switch e git restore são estáveis e não mais considerados experimentais, consolidando seus papéis como alternativas mais claras para git checkout.
  • git whatchanged está obsoleto e programado para remoção no Git 3.0; ele permanece disponível por trás --i-still-use-this.
  • git for-each-ref adiciona paginação via --start-after, melhorando a listagem de referências em repositórios muito grandes.
  • A fusão obtém um resumo mais organizado com --compact-summary for git merge e git pull.

Rumo ao Git 3.0: padrões de segurança e armazenamento

O projeto continua sua transição SHA-256. Embora os novos repositórios ainda sejam SHA-1 por padrão hoje, mais componentes internos e transportes na versão 2.51 entendem SHA-256, facilitando a experimentação e os testes de compatibilidade.

Reftable está a caminho de se tornar o padrão backend de referência no Git 3.0, abordando a diferenciação entre maiúsculas e minúsculas e armadilhas do Unicode no Windows/macOS, permitindo transações de referência atômica e se beneficiando da compactação geométrica e da compactação de prefixo.

Quer uma prévia dos padrões futuros? Você pode construir o Git com WITH_BREAKING_CHANGES para testar a próxima linha de base (por exemplo, SHA-256 e padrões reftable) antes do lançamento da versão 3.0.

Processo e padrões do desenvolvedor

O uso do C99 se expande: a base de código agora permite amplamente o bool palavra-chave e os documentos do projeto cujos recursos do C99 foram adotados ou estão em avaliação, equilibrando recursos de linguagem modernos com portabilidade.

As diretrizes de contribuição evoluem para permitir envios sob identidades diferentes do nome legal do colaborador, alinhando-se mais de perto com a abordagem do kernel Linux e reduzindo as barreiras para participação.

Git 2.51 combina vitórias concretas — como MIDX sem cruft, pacotes path-walk, importação/exportação de stash e melhorias de desempenho de grandes repositórios — com progresso constante em direção a criptografia mais forte e padrões de armazenamento modernos, entregues por uma comunidade diversificada de mantenedores e novos colaboradores.

Artigos relacionados: