Git 2.55

Apresentado lançamento do sistema distribuído de controle de versões Git 2.55. Entre as principais mudanças: inclusão por padrão da compilação com Rust, implementação para Linux do processo fsmonitor, nova estratégia de reempacotamento do índice MIDX incremental, comando git history fixup para corrigir o commit, otimização da geração de mapas de disponibilidade de objetos, suporte para execução paralela de hooks, comando git format-rev. Código Git é distribuído sob a licença GPLv2+.

Em comparação com a versão anterior, a nova versão inclui 505 mudanças, preparadas com a participação de 100 desenvolvedores, 33 dos quais participaram do desenvolvimento do Git pela primeira vez.

Principais inovações (github.blog, gitlab.com/blog, gitlab.com/git-scm):

  • Por padrão incluída suporte a componentes em Rust. O compilador rustc o sinalizador -k para integração com entre as dependências de construção. Para compilar sem Rust, você pode usar a flag NO_RUST=1 ao executar a ferramenta make ou -Drust=disabled ao executar meson configure. A possibilidade de desativar a compilação com Rust será mantida até a branch Git 3.0, na qual o Rust será incluso entre as dependências obrigatórias. Uma camada foi implementada em Rust para portabilidade entre configurações com hashes SHA-1 e SHA-256, além de algumas funções internas, como codificação e decodificação de valores inteiros de comprimento variável. Espera-se que no futuro uma reformulação mais significativa de componentes internos do Git seja realizada em Rust.
  • Na equipe experimental "git history", que fornece ferramentas para reescrever o histórico de mudanças, foi adicionada a operação ‘git history fixup’ para corrigir o commit. A operação fixup permite mover alterações adicionadas por meio de git add para um commit anterior e reescrever automaticamente todos os commits subsequentes, de forma semelhante à execução do comando git commit —fixup= e início do git rebase —autosquash ~.
  • Para a plataforma Linux, foi implementado um processo em segundo plano fsmonitor, que monitora mudanças no sistema de arquivos usando o mecanismo inotify e permite evitar a varredura de todo o diretório de trabalho ao executar comandos como git status. A ativação é feita através da configuração "core.fsmonitor».
  • A equipe do git repack adicionou o modo —write-midx=incremental, que implementa uma nova estratégia de atualização de metadados no índice MIDX incremental (multi-pack index), permitindo evitar a reempacotamento de todo o índice. No índice multi-pack incremental, em vez de um único grande índice que contém informações sobre a distribuição de objetos entre arquivos pack, é aplicada uma separação em camadas — cada camada abrange um determinado número de arquivos pack e é armazenada em um arquivo bitmap separado. Essa estrutura permite adicionar ao índice dados sobre objetos em novos arquivos pack, anexando novas camadas ao índice sem reconstruir as camadas existentes. O comando git repack —write-midx=incremental permite adicionar uma nova camada ao índice MIDX incremental, cobrindo os arquivos pack recém-criados. Em combinação com o modo de embalagem de repositórios —geometric, o novo comando possibilita combinar novos objetos de vários arquivos pack em um único arquivo pack maior e, se necessário, realizar a embalagem e fusão de várias camadas vizinhas do índice MIDX incremental. Essa estratégia permite que, ao executar git repack, apenas as camadas superiores sejam reescritas, mantendo as antigas grandes camadas intactas e evitando o crescimento descontrolado da cadeia de camadas, mantendo o número total de camadas em um nível proporcional ao logaritmo do número total de objetos.
  • A geração de bitmaps de disponibilidade de objetos foi significativamente otimizada graças a um novo algoritmo de percurso na árvore de objetos, que exclui recursões desnecessárias, faz cache das posições dos objetos, ordena bitmaps antes de sua junção pela operação XOR e reformula o código para a criação de bitmaps de pseudo-fusão (pseudo-merge). Em um repositório de teste, as otimizações permitiram reduzir o tempo de geração de bitmaps de 612 para 294 segundos.
  • Possibilidade de execução paralela de ganchos independentes foi implementada ganchos nos arquivos de configuração. Hooks que afetam o estado compartilhado ou o consideram, como aqueles que alteram as mensagens de commit ou inspecionam índices e a árvore de trabalho, não podem ser executados em paralelo. No entanto, é possível executar hooks para verificação por linters e execução de testes unitários ao mesmo tempo. Hooks que permitem execução paralela são configurados através do parâmetro hook.nome_do_hook.parallel = true. O número de trabalhos executados simultaneamente é determinado pela configuração hook.jobs, hook.<evento>.jobs ou pela opção de linha de comando -j.
  • Na equipe git pack-objects, foi implementada a opção de especificar filtros, como blob:none, blob:limit=<n>, tree:0, object:type=<tipo>, sparse:<oid> e combine:. Em um teste realizado, descartar blobs durante a execução de —path-walk permitiu reduzir o tamanho do pack-file em 16%.
  • Foi adicionada a comando git format-rev para formatação de revisões e nomes de objetos mencionados em listas de commits ou que aparecem em texto arbitrário (por exemplo, pode ser usado em hooks para processar mensagens de commit).

git last-modified | git format-rev —stdin-mode=text —format=%an

Junio C Hamano builtin/commit.c

  • Agora, por padrão, a maioria das sequências de controle do terminal em mensagens informativas e texto de erro enviados pelo servidor está escapada. Ao se conectar a um servidor malicioso, essas sequências de escape poderiam ser usadas para ocultar ou modificar a saída, por exemplo, através de sequências de escape para mover o cursor e limpar o texto. O suporte a sequências de escape para destacar elementos em cores foi mantido.
  • A comando git checkout -m agora salva automaticamente as alterações locais em conflito na área de stash, sem a necessidade de resolver o conflito imediatamente.
  • Na comando git push, foi adicionada a capacidade de enviar uma branch para vários servidores Git externos com um único comando. Por exemplo, para transferir a branch main não só para o servidor principal, mas também para espelhos, você pode criar um grupo publish de servidores github, gitlab e mirror:

git config remotes.publish "github gitlab mirror"
git push publish main

  • Na comando git log —graph, foi adicionada a opção —graph-lane-limit=<N> para limitar o número de faixas verticais na visualização de branches, permitindo deixar espaço na tela para os dados sobre commits em repositórios com um grande número de branches.

…
* | | | | 619931f561 Merge branch ‘dl/posix-unused-warning-clang’
|\ \ \ \ \
| * | | | ~ cf48887610 compat/posix.h: simplificar a comparação GIT_GNUC_PREREQ()
| * | | | ~ ffd45926dc compat/posix.h: limpar GIT_GNUC_PREREQ() e UNUSED
|\ \ \ \ \~
| * | | | ~ 3f5203eeb4 ls-files: filtrar pathspec antes do lstat

  • Os comandos git log e git rev-list receberam a opção —max-count-oldest=, permitindo selecionar os N commits mais antigos em um intervalo.

Fonte: linux.org.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster