Git 2.51 explicado: MIDX sem cruft, pacotes path-walk, intercâmbio de stash e o caminho para o Git 3.0

Última atualização: 08/21/2025
  • MIDX sem Cruft: novo comportamento de reempacotamento mais repack.MIDXMustContainCruft produz índices multipack menores e mais rápidos.
  • Pacote Path-walk: o modo --path-walk geralmente cria pacotes significativamente menores com tempos competitivos.
  • Intercâmbio de estoque: exporte/importe entradas de estoque por meio de referências para mover trabalho com segurança entre máquinas.
  • Ferramentas e roteiro: filtros cat-file e Bloom aprimorados; switch/restore estabilizados; preparação para Git 3.0 (SHA-256, reftable).
Git 2.51

Git 2.51 já está disponível, trazendo um amplo conjunto de melhorias de desempenho e usabilidade, contribuídas por mais de 91 desenvolvedores, incluindo 21 colaboradores iniciantes. Esta versão se concentra em eficiência de armazenamento, leituras mais rápidas em repositórios grandes e melhores maneiras de mover o trabalho em andamento entre máquinas sem precisar passar por obstáculos.

Os temas principais incluem índices multi-pack sem cruft, um novo compactador de caminho e um formato de troca de estoque. Você também encontrará progresso constante em direção a padrões criptográficos mais fortes (SHA-256) e mudanças futuras programadas para o Git 3.0, além de um polimento pragmático em encanamentos e porcelanas do dia a dia.

Índices multipack sem crostas

Recursos do Git 2.51

Grandes repositórios dependem de packfiles e MIDX (índices multi-pack) para resolver objetos rapidamenteHistoricamente, objetos inacessíveis ficavam em "pacotes de lixo" e deveriam ficar fora do MIDX. Mas se um objeto antes inacessível posteriormente se torna acessível e fica apenas em um pacote de lixo, isso pode quebrar as premissas do bitmap e tornar o processo mais lento.

O Git 2.51 muda a forma como os pacotes não-cruft são construídos: durante o reempacotamento, o Git agora garante que objetos cuja única outra cópia esteja em um pacote cruft sejam duplicados no conjunto não-cruft, tornando esse conjunto fechado sob acessibilidade. Na prática, isso permite índices multipack menores e mais rápidos sem sacrificar a correção.

Uma nova configuração, repack.MIDXMustContainCruft, ativa esta estratégia, armazenando pacotes de cruft fora do MIDX, mantendo as pesquisas rápidas. O GitHub relata ganhos tangíveis com essa abordagem em um grande monorepo: o tamanho do MIDX diminuiu em ~38%, as gravações foram ~35% mais rápidas e o desempenho de leitura melhorou em cerca de 5%.

Se o seu monorepo MIDX ficou difícil de manejar, tente um reempacotamento com a nova configuração e meça os ganhos de pesquisa e travessia em seus fluxos de trabalho de CI e desenvolvedor.

Pacotes menores com caminhada no caminho

Melhorias no Git 2.51

A escolha de bons deltas é o coração dos packfiles compactos. Versões anteriores introduziram um hash de nome revisado para melhorar o pareamento delta, mas o Git 2.51 vai além com um modo de “caminhada de caminho” que agrupa e emite todos os objetos do mesmo caminho juntos, ignorando completamente a heurística de hash de nome.

Em muitos repositórios, o caminho a percorrer produz pacotes notavelmente menores mantendo-se competitivo em tempo de execução em comparação com as travessias tradicionais de ordem de revisão. É especialmente eficaz quando você tem muitas versões dos mesmos arquivos evoluindo ao longo de caminhos consistentes.

Para experimentar durante a reembalagem, use a nova opção em pack-objects: --path-walk. Para equipes que estão levando os tamanhos dos pacotes ao limite, isso pode reduzir a transferência de rede e o armazenamento local de uma só vez.

Formato de troca de estoque

Mover estoques entre máquinas tem sido complicado porque os commits do stash estão escondidos atrás de um único refs/stash. O Git 2.51 introduz uma variante que representa múltiplas entradas de stash como uma sequência de commits vinculados, para que eles se comportem mais como um log normal.

Com esse design, você pode exportar e importar stashes por meio de referências comuns, envie ou busque-os como ramificações ou tags e preserve o trabalho em andamento em todos os ambientes sem patches ad hoc ou tarballs.

Exemplo de fluxo de trabalho para compartilhar um estoque:

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

# On another machine
$ git fetch origin '+refs/stashes/*:refs/stashes/*'
$ git stash import refs/stashes/my-stash

Essa abordagem mantém seu trabalho de rascunho organizado e auditável, especialmente em configurações entre dispositivos ou ao delegar trabalho em andamento a um colega de equipe.

Encanamento mais preciso e ergonomia diária

cat-file fica mais inteligente Em modos em lote: quando perguntado sobre o caminho de um submódulo, as compilações anteriores à versão 2.51 frequentemente retornavam "ausente". O Git 2.51 agora relata o tipo de objeto de forma mais útil (por exemplo, "submódulo"), o que auxilia scripts que precisam analisar o conteúdo do repositório em escala.

Os filtros Bloom de caminho alterado agora ajudam com múltiplas especificações de caminho (por exemplo, git log -- a b), ampliando os casos em que as travessias de histórico podem ignorar confirmações com segurança. Isso representa um ganho prático de velocidade para padrões comuns de revisão e investigação.

git switch e git restore se formam em experimental. Apresentado como alternativas mais claras e específicas para o multifunção git checkout, seu CLI agora é considerado estável daqui para frente.

git whatchanged está obsoleto e programado para remoção no Git 3.0. Se você ainda depende dele, ele permanece invocável por trás do apropriadamente nomeado --i-still-use-this bandeira enquanto você migra para git log --raw.

Rumo ao Git 3.0: padrões e mudanças significativas testáveis

O projeto continua se preparando para que o SHA-256 e o ​​backend de referência reftable se tornem padrões no Git 3.0. No Git 2.51, os repositórios ainda são criados com SHA-1 por padrão, mas mais encanamentos internos entendem SHA-256, facilitando o trabalho de experimentação e integração.

Se você quiser uma prévia dos padrões de amanhã, você pode construir com WITH_BREAKING_CHANGES para testar os comportamentos de entrada em ambientes controlados. Provedores de hospedagem e autores de ferramentas podem usar isso para identificar casos extremos antes da grande mudança.

O duplo objetivo permanece claro: fortalecer a base criptográfica e modernizar as referências, mantendo a compatibilidade com versões anteriores do vasto ecossistema construído com base nas premissas atuais do Git.

Atualizações de linguagem e processo

Do lado da implementação, a adoção do C99 continua metodicamente. O projeto agora permite a bool palavra-chave em toda a base de código e documenta quais recursos do C99 estão em uso ou em avaliação, mantendo a portabilidade em mente para uma ampla matriz de compiladores.

As diretrizes de contribuição receberam uma atualização inclusiva: os patches não precisam mais ser enviados sob o nome legal do colaborador, alinhando a política do Git mais de perto com o kernel do Linux e dando suporte aos colaboradores que preferem identidades alternativas.

Como experimentar os recursos principais hoje

Habilitar a estratégia MIDX sem resíduos para reduzir índices de vários pacotes e acelerar leituras:

$ git config --global repack.MIDXMustContainCruft true
$ git gc --cruft --aggressive

Reembale com caminhada no caminho para avaliar diferenças no tamanho da embalagem e no tempo de execução:

$ git repack -ad
$ git pack-objects --path-walk --revs --stdout < .git/objects/pack/pack-list.txt > new.pack

Compartilhe um estoque entre máquinas com os novos subcomandos de exportação/importação:

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

Tudo ditoO Git 2.51 é uma versão evolutiva que traz resultados no uso diário: gerenciamento de objetos mais rápido e enxuto; melhorias práticas para scripts e consultas de histórico; um fluxo de trabalho de stash mais limpo; e progresso constante em direção à era do Git 3.0, onde SHA-256 e reftable se tornam a norma.

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