Lançamento do sistema de controle de origem distribuído Git 2.22

Introduzido lançamento de um sistema de controle de origem distribuído Git 2.22.0. Git é um dos sistemas de controle de versão mais populares, confiáveis ​​e de alto desempenho, fornecendo ferramentas flexíveis de desenvolvimento não linear baseadas em ramificação e fusão. Para garantir a integridade do histórico e resistência a mudanças retroativas, é utilizado hash implícito de todo o histórico anterior em cada commit, sendo também possível certificar tags e commits individuais com assinaturas digitais dos desenvolvedores.

Em comparação com a versão anterior, a nova versão incluiu 745 alterações, preparadas com a participação de 74 desenvolvedores, dos quais 18 participaram do desenvolvimento pela primeira vez. O principal inovações:

  • Disponível desde a versão 1.18, o novo modo de commit rebase "git rebase --rebase-merges" substitui a antiga opção "--preserve-merges", que agora está obsoleta. A operação "git rebase" é usada para substituir uma série de commits por um novo commit base, por exemplo, para mover um branch separado que está desenvolvendo algum novo recurso para o estado atual do branch master, que inclui correções adicionadas após o branch :

    o - o - o (meu recurso)

    /

    o - o - o - o - o (mestre)

    o - o - o (meu recurso)

    /

    o - o - o - o - o (mestre)

    Para preservar a estrutura do branch em um branch migrado, poderia ser utilizada anteriormente a opção “--preserve-merges”, que, quando executada em modo interativo (git rebase -i --preserve-merges), permitia editar o histórico de commits, mas não garantiu a preservação completa da estrutura do repositório. O novo modo “--rebase-merges” permite preservar a estrutura das alterações na ramificação que está sendo migrada, ao mesmo tempo que fornece uma gama completa de operações interativas, incluindo exclusão, reagrupamento e renomeação de commits.

    Por exemplo, "--rebase-merges" permite reenvie os commits de um branch separado para um branch master mais recente, enquanto mantém a estrutura do branch no branch migrado, e faça algumas alterações nas notas de commit imediatamente.

  • Adicionado suporte para criação de uma nova ramificação com base no resultado da determinação da base de mesclagem de duas outras ramificações (base de mesclagem, ligação a um ancestral comum) usando as construções “git branch new A...B” e “git checkout -b new A...B”, em que “A ...B" envolve definir uma base de mesclagem entre dois commits especificados, semelhante a como "git checkout A...B" muda o HEAD para o commit base e "diff A. ..B" mostra as alterações entre o commit "B" e o mesmo do commit "A" "Ancestor.

    Por exemplo, ao trabalhar em uma ramificação my-feature separada, esse recurso pode ser usado quando você deseja iniciar a partir de uma ramificação diferente, por exemplo, do mesmo local na ramificação master a partir da qual foi feito o check-out da ramificação my-feature. Anteriormente, isso exigia examinar manualmente o log de alterações, o que era inconveniente se você tivesse um grande histórico de alterações e, em seguida, executar “git merge-base master my-feature” para calcular o hash da base de mesclagem entre as ramificações master e my-feature e criar um novo branch relativo ao ancestral comum “git branch my-other-feature hash”. No Git 2.22, você pode usar a sintaxe "git branch my-other-feature A...B" para criar uma ramificação relativa à base de mesclagem de duas outras ramificações;

  • Adicionada opção "git branch --show-current" para exibir o nome da branch obtida durante a operação de checkout;
  • Adicionada a opção “git checkout —no-overlay — dir”, que permite, ao realizar uma operação de checkout, trazer o conteúdo do diretório dir para um formato que corresponda totalmente ao estado do branch master. Por exemplo, se houver um arquivo na cópia local do diretório dir que não esteja na ramificação master, então, por padrão, ao executar “git checkout master - dir” ele será deixado, e se o “--no-overlay ” for especificada, ela será excluída;
  • O comando "git diff" usa uma API universal para analisar opções, o que torna possível unificar o tratamento de opções com outros utilitários git. Por exemplo, em “git diff”, todas as opções agora têm seus antagonistas (“--function-context” e “--no-function-context”);
  • Adicionada a capacidade de filtrar tags estendidas anexadas a commits na saída “git log” (“trailer” - sinalizadores de informações adicionais, como Signed-off-by e Co-authored by). É possível filtrar rótulos por chave e valor, por exemplo:
    "git log --pretty="%(trailers:key=Revisado por,valueonly)";

  • Um novo mecanismo de rastreamento, Trace2, foi adicionado, oferecendo um formato de saída mais flexível e estruturado. Trace2 permite coletar telemetria sobre operações executadas e dados de desempenho para análise e depuração mais detalhadas (o manipulador é atribuído pelo usuário, nenhum dado é enviado externamente);
  • O relatório “git bisect” tornou-se mais legível, no qual os commits problemáticos são agora mais claramente destacados e as estatísticas resumidas sobre as alterações de cada arquivo são exibidas (ao nível do número de linhas alteradas);
  • A heurística para determinar renomeações de diretórios foi reformulada para eliminar a falsa instalação de rótulos de renomeação. Em caso de dúvida, esses diretórios agora são marcados como conflitantes;
  • Um aviso é exibido quando você tenta instalar uma tag em outra tag, o que geralmente é feito por engano e pode levar à configuração da tag no commit errado (por exemplo, uma construção como “git tag -f -m “mensagem atualizada” my-tag1 my-tag2″ resultará na criação de uma tag na tag antiga, enquanto o desenvolvedor esperava que a nova tag fosse instalada no commit apontado pela tag antiga);
  • A geração está habilitada para repositórios de bitmap (estrutura de "bitmaps de acessibilidade" baseada em disco), que armazenam dados sobre conjuntos de objetos disponíveis para cada confirmação e permitem determinar rapidamente a presença de um objeto base. Essa estrutura reduz significativamente o tempo de execução das operações de recuperação de dados (git fetch).

Fonte: opennet.ru

Adicionar um comentário