Lançamento do Git 2.55 com suporte ao Rust ativado por padrão

Foi lançado o lançamento do sistema de gestão de código-fonte distribuído Git 2.55. Entre as principais mudanças: inclusão padrão da compilação com Rust, implementação do processo fsmonitor para Linux, nova estratégia de reapacotamento do índice MIDX incremental, comando "git history fixup" para corrigir commit, otimização na geração de mapas de disponibilidade de objetos, suporte à execução paralela de hooks, comando "git format-rev". O código do Git é distribuído sob a licença GPLv2+.

Comparado à versão anterior, a nova versão incorpora 505 mudanças, preparadas com a participação de 100 desenvolvedores, 33 dos quais participaram do desenvolvimento do Git pela primeira vez. As principais novidades (1, 2, 3):

  • O suporte a componentes em Rust está ativado por padrão. O compilador rustc
    foi adicionado à lista de dependências de compilação. Para compilar sem Rust, pode-se usar a flag "NO_RUST=1" ao executar a ferramenta make ou "-Drust=disabled" ao rodar "meson configure". A possibilidade de desativar a compilação com Rust será mantida até a versão 3.0 do Git, na qual o Rust se tornará uma dependência obrigatória. Uma camada de portabilidade entre configurações com hashes SHA-1 e SHA-256 foi implementada em Rust, além de algumas funções internas, como a codificação e decodificação de valores inteiros de comprimento variável. No futuro, espera-se que componentes internos mais significativos do Git sejam reescritos em Rust.
  • A equipe experimental "git history", que fornece funcionalidades para reescrever o histórico de mudanças, teve a operação "git history fixup" adicionada para corrigir commits. A operação "fixup" permite transferir mudanças adicionadas através de "git add" para um commit anterior e reescrever automaticamente todos os commits subsequentes, semelhante à execução do comando "git commit --fixup=" e ao iniciar "git rebase --autosquash ~".
  • Para a plataforma Linux, foi implementado o processo em segundo plano fsmonitor, que monitora alterações 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".
  • O comando "git repack" agora inclui o modo "--write-midx=incremental", que implementa uma nova estratégia de atualização de metadados no índice incremental MIDX (multi-pack index), permitindo evitar a reempacotagem 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 nos arquivos pack, utiliza-se uma divisão em camadas - cada camada abrange um número específico de arquivos pack e é armazenada em um arquivo bitmap separado. Essa estrutura permite adicionar dados sobre objetos em novos arquivos pack ao índice, anexando novas camadas ao índice sem reconstruir as camadas já existentes.

    O comando "git repack --write-midx=incremental" permite adicionar uma nova camada ao índice MIDX incremental, abrangendo novos arquivos pack recém-criados. Combinado com o modo de empacotamento de repositórios "--geometric", o novo comando possibilita a combinação de novos objetos de vários arquivos pack em um único arquivo pack maior e, se necessário, realizar a compactação e fusão de várias camadas adjacentes do índice MIDX incremental. Essa estratégia permite que, ao executar "git repack", sejam reescritas apenas as camadas superiores, mantendo as grandes camadas antigas intactas, além de evitar 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 mapas de disponibilidade de objetos foi significativamente otimizada por meio de um novo algoritmo de varredura da árvore de objetos, que elimina recursões desnecessárias, faz cache das posições dos objetos, classifica os mapas antes de uni-los com a operação XOR e reformula o código para criar mapas de pseudo-fusão (pseudo-merge). Nos repositórios de teste, as otimizações permitiram reduzir o tempo de geração dos mapas de 612 para 294 segundos.
  • Foi implementada a possibilidade de execução paralela de hooks independentes em arquivos de configuração. Hooks que afetam o estado compartilhado ou que o consideram, como os que alteram mensagens de commit ou inspecionam índices e a árvore de trabalho, não podem ser executados em paralelo. No entanto, hooks para verificação com linters e execução de testes unitários podem ser executados paralelamente. 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.<event>.jobs ou pela opção de linha de comando "-j".
  • Na equipe "git pack-objects --path-walk", foi implementada a possibilidade de especificar filtros, como "blob:none", "blob:limit=<n>", "tree:0", "object:type=<type>", "sparse:<oid>" e "combine:". O teste realizado mostrou que a exclusão de blobs ao executar "--path-walk" permitiu reduzir o tamanho do arquivo pack gerado em 16%.
  • Foi adicionada o comando "git format-rev" para formatar revisões e nomes de objetos mencionados em listas de commits ou que apareçam em texto aleató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

  • Por padrão, agora está ativada a ocultação da maioria das sequências de controle de terminal em mensagens de informação e textos de erro transmitidos servidor. Ao acessar componentes maliciosos servidor , 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 texto. O suporte para sequências de escape para realce de elementos com cores foi mantido.
  • O comando "git checkout -m" agora salva automaticamente as alterações locais conflitantes na área stash sem a necessidade de resolver o conflito imediatamente.
  • O comando "git push" ganhou a possibilidade de enviar uma branch para vários servidores Git externos com um único comando. Por exemplo, para enviar a branch main não apenas para o servidor principal, mas também para espelhos, você pode criar um grupo "publish" com servidores "github", "gitlab" e "mirror":

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

  • No comando "git log --graph", foi adicionada a opção "--graph-lane-limit=<N>" para limitar o número de faixas verticais ao visualizar branches, permitindo deixar espaço na tela para 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: opennet.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