Lançamento do sistema de controle de versão distribuído Git 2.22

Apresentado lançamento do sistema de controle distribuído de textos-fonte Git 2.22.0. O Git é um dos sistemas de controle de versão mais populares, confiáveis e de alto desempenho, oferecendo ferramentas flexíveis para desenvolvimento não linear, baseadas em ramificações e mesclagens de branches. Para garantir a integridade do histórico e a resistência a alterações retroativas, utiliza-se uma hash implicita de todo o histórico anterior em cada commit, além de ser possível verificar digitalmente as assinaturas dos desenvolvedores em tags e commits específicos.

Em comparação com a versão anterior, esta nova versão inclui 745 mudanças, preparadas com a contribuição de 74 desenvolvedores, dos quais 18 participaram do desenvolvimento pela primeira vez. Principais novidades:

  • Disponível desde a versão 1.18, o novo modo de transferência de conjunto de commits "git rebase --rebase-merges" substituiu a antiga opção "--preserve-merges", que agora está marcada como obsoleta. A operação "git rebase" é usada para substituir uma série de commits por um novo commit base, por exemplo, para mover uma branch específica, que desenvolve uma nova funcionalidade, para o estado atual da branch master, incluindo correções adicionadas após a ramificação.

    o — o — o (my-feature)

    /

    o — o — o — o — o (master)

    o — o — o (my-feature)

    /

    o — o — o — o — o (master)

    Para manter a estrutura de ramificação na branch transferida, a opção "--preserve-merges" poderia ser utilizada anteriormente, permitindo editar o histórico de commits ao ser executada no modo interativo (git rebase -i --preserve-merges), mas não garantia a preservação completa da estrutura do repositório. O novo modo "--rebase-merges" permite manter a estrutura das mudanças na branch transferida, fornecendo um conjunto completo de operações interativas, incluindo exclusão, reorganização e renomeação de commits.

    Por exemplo, "--rebase-merges" permite retransmitir commits de uma branch separada para uma branch master mais nova, enquanto mantém a estrutura de ramificação na branch transferida e realiza mudanças em tempo real nas notas dos commits.

  • Adicionada a suporte para criação de um novo branch com base no resultado da definição da base de merge entre dois outros branches (merge base, referenciando um ancestral comum) usando as construções "git branch new A…B" e "git checkout -b new A…B", onde "A…B" implica na definição da base de merge entre os dois commits especificados, assim como "git checkout A…B" desloca o HEAD para o commit base e "diff A…B" mostra as mudanças entre o commit "B" e o ancestral comum com o commit "A".

    Por exemplo, ao trabalhar em um branch separado my-feature, essa nova funcionalidade pode ser usada quando é necessário começar a partir de outro branch, como a mesma posição no branch master de onde o branch my-feature foi extraído. Anteriormente, isso exigia examinar manualmente o log de mudanças, o que era inconveniente com um histórico de mudanças extenso, em seguida, executar "git merge-base master my-feature" para calcular o hash da base de merge entre os branches master e my-feature e criar um novo branch em relação ao ancestral comum "git branch my-other-feature hash". No Git 2.22, para criar um branch em relação à base de merge de dois outros branches, pode-se usar a sintaxe "git branch my-other-feature A…B";

  • Adicionada a opção "git branch --show-current" para mostrar o nome do branch obtido ao executar a operação checkout;
  • Adicionada a opção "git checkout --no-overlay -- dir", que permite durante a operação checkout restaurar o conteúdo do diretório dir ao estado correspondente ao branch master. Por exemplo, se houver um arquivo na cópia local do diretório dir que não existe no branch master, então, por padrão, ao executar "git checkout master -- dir", ele será mantido, e ao especificar a opção "--no-overlay" será removido;
  • Na equipe "git diff" foi implementada uma API universal para analisar opções, o que possibilitou a unificação do tratamento das opções com outras utilidades do git. Por exemplo, no "git diff", agora todas as opções têm seus antagonistas disponíveis ("--function-context" e "--no-function-context");
  • Adicionada a possibilidade de filtragem ao exibir "git log" dos rótulos anexados aos commits ("trailer" - bandeiras informativas adicionais, como Signed-off-by e Co-authored-by). É possível filtrar rótulos tanto por chave quanto por valor, como por exemplo:
    "git log --pretty="%(trailers:key=Reviewed-by,valueonly)";
  • Foi adicionado um novo mecanismo de rastreamento Trace2, que oferece um formato de saída mais flexível e estruturado. O Trace2 permite coletar telemetria sobre operações executadas e dados de desempenho para uma análise e depuração mais detalhadas (o manipulador é atribuído pelo usuário, nenhum dado é enviado para fora);
  • O relatório "git bisect" foi tornado mais legível, agora destacando de forma mais clara os commits problemáticos e apresentando um resumo das estatísticas de alterações para cada arquivo (em termos do número de linhas alteradas);
  • A heurística para determinação de renomeações de diretórios foi reformulada com o objetivo de eliminar a definição errônea de etiquetas de renomeação. Quando há dúvidas, esses diretórios são agora marcados como conflitantes;
  • Foi adicionado um aviso ao tentar aplicar uma tag em outra tag, o que geralmente ocorre por engano e pode resultar na associação de uma etiqueta ao commit errado (por exemplo, a construção "git tag -f -m 'mensagem atualizada' minha-tag1 minha-tag2" resultará na criação de uma tag em uma tag antiga, enquanto o desenvolvedor esperava que a nova tag fosse aplicada ao commit que a antiga aponta);
  • Foi incluída a geração de mapas de bits para repositórios (estrutura de disco "reachability bitmaps"), que armazena dados sobre conjuntos de objetos disponíveis para cada commit e permite determinar rapidamente a presença de um objeto base. A estrutura indicada reduz significativamente o tempo de execução das operações de extração de dados (git fetch).

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