Git 2.39 versão de controle de origem

Após dois meses de desenvolvimento, o sistema de controle de origem distribuído Git 2.39 foi lançado. 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 a resistência a mudanças retroativas, é utilizado hash implícito de todo o histórico anterior em cada commit; também é possível certificar tags individuais e commits com assinaturas digitais dos desenvolvedores.

Em comparação com a versão anterior, a nova versão incluiu 483 alterações, preparadas com a participação de 86 desenvolvedores, dos quais 31 participaram do desenvolvimento pela primeira vez. Principais inovações:

  • O comando “git shortlog”, projetado para exibir resumos com estatísticas do histórico de alterações, adicionou uma opção “-group” para agrupamento arbitrário de commits por campos não limitados ao autor ou committer. Por exemplo, para exibir uma lista de desenvolvedores com informações sobre o número de alterações, levando em consideração os helpers mencionados no campo "Coautoria de", você poderia usar o comando: git shortlog -ns --group=author - -group=trailer:co-autoria de

    A saída do Shortlog pode ser agregada usando especificadores de formatação, e a opção “--group” pode simplificar significativamente a criação de relatórios complexos e eliminar a necessidade de comandos de classificação adicionais. Por exemplo, para criar um relatório com informações sobre quantos commits para uma determinada versão foram aceitos em cada mês, você pode especificar: git shortlog v2.38.0.. —date='format:%Y-%m' —group=' %cd' -s 2 2022-08 47 2022-09 405 2022-10 194 2022-11 5 2022-12 Anteriormente, para realizar uma operação semelhante seria necessário usar os utilitários sort e uniq: git log v2.38.0 .. —data='formato:%Y -%m' —formato='%cd' | classificar | uniq -c

  • Os recursos do mecanismo “cruft packs”, projetado para empacotar objetos inacessíveis que não são referenciados no repositório (não referenciados por ramificações ou tags), foram ampliados. Objetos inacessíveis são excluídos pelo coletor de lixo, mas permanecem no repositório por um certo tempo antes de serem excluídos para evitar condições de corrida. O mecanismo “cruft packs” permite armazenar todos os objetos inacessíveis em um arquivo pack e exibir dados sobre o tempo de modificação de cada objeto em uma tabela separada, armazenada em um arquivo separado com a extensão “.mtimes”, para que eles não não se sobreponha ao tempo total de modificação.

    O período de tempo que os objetos inacessíveis permanecem no repositório antes de serem realmente excluídos é determinado pela opção “—prune=” " No entanto, embora atrasar antes da exclusão seja uma forma bastante eficaz e prática de evitar a corrupção do repositório devido a condições de corrida, não é 100% confiável. Para facilitar a restauração de um repositório danificado, a nova versão oferece a capacidade de salvar objetos ausentes adicionando a opção “--expire-to” ao comando “git repack”, que permite especificar um arquivo para criar um externo cópia de todos os objetos excluídos. Por exemplo, para salvar objetos inacessíveis que não foram alterados nos últimos 5 minutos no arquivo backup.git, você pode usar o comando: git repack --cruft --cruft-expiration=5.minutos.ago -d --expire -to=../backup.git

  • Aumentou significativamente (até 70%) a velocidade da operação "git grep -cached" ao pesquisar em áreas que utilizam clonagem parcial (checkout esparso) e para as quais existem índices parciais (índice esparso). Anteriormente, ao especificar a opção “-cached”, a busca era realizada primeiro no índice regular e depois nos parciais, o que gerava atrasos perceptíveis na busca em grandes repositórios.
  • A verificação pelo servidor da coerência de novos objetos antes de serem colocados no repositório durante a operação "git push" foi acelerada. Ao passar a contabilizar apenas os links declarados na verificação, num repositório de teste com 7 milhões de links, dos quais apenas 3% são abrangidos pela operação push, as otimizações efetuadas permitiram reduzir o tempo de verificação em 4.5 vezes.
  • Para proteger contra possíveis estouros de números inteiros no código, o comando "git apply" limita o tamanho máximo dos patches que podem ser processados. Se o tamanho do patch exceder 1 GB, um erro será exibido.
  • Para proteção contra possíveis vulnerabilidades, foram feitas alterações para limpar informações desnecessárias dos cabeçalhos definidos ao usar o módulo h2h3 com a opção GIT_TRACE_CURL=1 ou GIT_CURL_VERBOSE=1 junto com HTTP/2.
  • Ao realizar um check-out em uma ramificação que é um link simbólico para outra ramificação, o comando "git simbólico-ref HEAD" agora exibe o nome da ramificação de destino em vez do nome do link simbólico.
  • Adicionado suporte para o argumento @{-1} à opção “--edit-description” (“git branch —edit-description @{-1}”) para editar a descrição de um branch anterior.
  • Adicionado o comando "git merge-tree --stdin" para passar uma lista de opções via entrada padrão.
  • Em sistemas de arquivos de rede, o manipulador fsmonitor, que monitora alterações no sistema de arquivos, está desabilitado por padrão.

Fonte: opennet.ru

Adicionar um comentário