Git 2.54

Git 2.54

Apresentado lançamento do sistema distribuído de controle de versões Git 2.54. O Git se destaca por sua alta performance e fornece ferramentas de desenvolvimento não linear baseadas na ramificação e fusão de branches. Para garantir a integridade do histórico e resistência a alterações retroativas, utiliza-se a hash implícita de todo o histórico anterior em cada commit, bem como a autenticação com assinaturas digitais dos desenvolvedores para tags e commits individuais. O código do Git é distribuído sob a licença GPLv2+.

Comparado à versão anterior, a nova versão inclui 770 alterações, preparadas com a participação de 137 desenvolvedores (66 participaram do desenvolvimento do Git pela primeira vez).

Principais novidades:

  • Foi implementado o comando “git history”, que fornece capacidades experimentais para reescrever o histórico de alterações, de forma mais simples e segura em comparação com o rebase de commits utilizando o comando git rebase. Duas operações são oferecidas:

    • git history reword para reescrever a mensagem no commit especificado sem alterar o diretório de trabalho e o índice (exceto a nota, o restante permanece inalterado). Por exemplo, para corrigir um erro de digitação.
    • git history split para dividir interativamente o commit especificado em dois commits diferentes, movendo partes selecionadas do commit original para um commit adicional.

    Versões futuras devem incluir comandos adicionais: git history fixup para corrigir um commit, git history drop para remover um commit, git history reorder para alterar a ordem dos commits e git history squash para combinar commits.

  • Foi implementado um novo método para definir manipuladores (hook) nos arquivos de configuração. Em vez de colocar scripts de manipuladores no diretório .git/hooks em cada repositório, os comandos para chamar os manipuladores agora podem ser especificados diretamente nos arquivos de configuração. As configurações podem ser vinculadas ao repositório ou especificadas em arquivos de configuração aplicáveis a todos os repositórios (/etc/gitconfig) ou ao repositório do usuário (~/.gitconfig). É possível vincular vários manipuladores a um único evento. Scripts do .git/hooks ainda são chamados, mas são executados após os manipuladores dos arquivos de configuração. Para ver a lista de manipuladores, use o comando git hook list, e para desativar seletivamente a chamada dos manipuladores, a configuração hook..enabled = false:

[hook "linter"] event = pre-commit command = ~\/bin\/linter —cpp20 [hook "no-leaks"] event = pre-commit command = ~\/bin\/leak-detector $ git hook list pre-commit global linter ~\/bin\/linter —cpp20 local no-leaks ~\/bin\/leak-detector

  • Na equipe "git maintenance" a estratégia padrão é geométrica (git config set maintenance.strategy geometric), permitindo reduzir o tempo de manutenção de grandes monorepositórios. Em comparação com a estratégia anterior, que utilizava a lógica do comando git gc, a nova estratégia evita a reempacotamento de todos os objetos e exclui operações de alto consumo de recursos, como a fusão de todos os arquivos pack (quando possível, a fusão é feita em partes e sem a limpeza de objetos removidos).
  • O banco de dados de objetos (ODB) e as APIs associadas foram migrados para uma nova arquitetura baseada na utilização de backends plugáveis. A reestruturação realizada abstrai o formato de armazenamento de objetos e permitirá, no futuro, a implementação de recursos como backends alternativos e formatos de objetos, por exemplo, para o armazenamento mais eficiente de grandes arquivos binários ou para otimizar o desempenho de grandes serviços de hospedagem git.
  • Na equipe "estrutura do repositório git" que fornece informações sobre a estrutura do repositório, exibe não apenas o tamanho total, mas também os maiores objetos de cada tipo, permitindo uma avaliação do tamanho sem a necessidade de uma ferramenta externa. git-sizer.

$ git repo structure … | * Maiores objetos | | | * Commits | | | * Tamanho máximo [1] | 17.23 KiB | | * Máximos pais [2] | 10 | | * Árvores | | | * Tamanho máximo [3] | 58.85 KiB | | * Máximas entradas [4] | 1.18 k | | * Blobs | | | * Tamanho máximo [5] | 1019.51 KiB | | * Tags | | | * Tamanho máximo [6] | 7.13 KiB |

  • Na equipe "git replay" usado no lugar de git rebase para reconstruir a história no servidor sem uma árvore de trabalho, inclui por padrão a atualização atômica de referências (em vez de exibir uma lista de comandos update-ref para execução manual), implementou a opção —revert para reverter alterações de uma série de commits, descarta commits vazios resultantes e possibilita a reconstrução da história até o commit raiz.
  • No "git rev-list" e comandos similares foi adicionada a opção —maximal-only para mostrar apenas commits inacessíveis por outros commits.
  • No comando "git repo info" foi adicionada a opção —keys para exibir uma lista de todas as chaves conhecidas.
  • Na equipe "git add -p» Ao navegar entre blocos de código usando as teclas «J» e «K», é possível marcar blocos já aprovados e ignorados. Foi acrescentada a opção —no-auto-advance para desativar a transição automática para o próximo arquivo, permitindo retornar a arquivos anteriores antes do commit.
  • Foi feita uma otimização na interface web «gitweb» para funcionar em dispositivos móveis.
  • Na equipe "git apply –directory» antes de usar, foi garantida a normalização de caminhos de arquivos, como .\/un\/..\/normalized\/path.
  • Foi documentada a possibilidade de adicionar suas próprias subcomandos através da colocação de arquivos git- no diretório de arquivos executáveis.
  • No comando "git send-email» foi adicionada a suportar certificados de cliente.
  • Para o comando «git status» foi implementada a configuração status.compareBranches, que permite especificar os ramos com os quais será feita a comparação do ramo atual:

[status] compareBranches = @{upstream} @{push}

  • No "git rebase» foi acrescentada a opção —trailer para facilitar a adição de metadados a todos os commits:

git rebase —trailer "Reviewed-by: Test "`

  • No comando "git fast-import» foi adicionada a possibilidade de substituir assinaturas de commits que se tornaram inválidas após a importação.
  • Foi adicionada a suportar compactação em índices MIDX (multi-pack index), onde camadas menores do índice MIDX com informações sobre a disponibilidade de objetos e arquivos bitmap correspondentes são unidas, permitindo reduzir o número de camadas acumuladas em repositórios antigos.
  • No comando git backfill, foi implementada a possibilidade de especificar revisões (intervalos de commits) e máscaras de caminho (pathspec) para limitar as partes da história das mudanças que são carregadas:

git backfill main~100..main git backfill — ‘*.c’

  • Adicionadas formas alternativas de chamar o comando git config list – git config -l e git config —list.
  • Foi permitido o uso de caracteres não-ASCII nos nomes de aliases de comandos definidos no arquivo de configuração:

[alias "pegar"] command = fetch

  • A exibição de assinaturas que tiveram suas chaves GPG expiradas, mas que eram válidas no momento da assinatura do commit, foi alterada. Essas assinaturas agora são exibidas como corretas, com uma observação sobre a expiração da chave (anteriormente, eram destacadas em vermelho, o que sugeria sua invalidade).
  • Ao acessar repositórios via HTTP, foi implementado o tratamento do erro com código 429 (Too Many Requests). As solicitações que resultarem nesse erro são agora vistas como um problema temporário, e a operação deve ser repetida após algum tempo. O atraso antes da repetição é configurado pela opção http.retryAfter, o número de repetições – http.maxRetries, o tempo de espera – http.maxRetryTime.

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