Após três meses de desenvolvimento, foi publicado o lançamento do sistema distribuído de controle de versões Git 2.46. O Git é um dos sistemas de controle de versões mais populares, confiáveis e de alto desempenho, oferecendo ferramentas flexíveis para desenvolvimento não linear baseadas em ramificação e fusão. Para garantir a integridade do histórico e resistência a alterações "retroativas", utiliza-se o hash implícito de todo o histórico anterior em cada commit, além de ser possível a verificação digital por meio de assinaturas dos desenvolvedores para tags e commits específicos. O código do Git é distribuído sob a licença GPLv2+.
Comparado à versão anterior, a nova versão inclui 746 mudanças, desenvolvidas por 96 desenvolvedores, dos quais 31 participam do desenvolvimento pela primeira vez. As principais novidades são:
- Adicionada a suporte experimental para um novo tipo de bitmap — "pseudo-merge reachability bitmap", onde, diferentemente da estrutura "reachability bitmap", os dados sobre conjuntos de objetos relacionados a commits não são armazenados vinculados a cada commit individual, mas sim a vários commits ao mesmo tempo. Essa organização permite utilizar um único bitmap ao determinar objetos para commits em diferentes ramificações, o que em grandes repositórios viabiliza evitar a criação de um grande número de bitmaps separados e acelera significativamente a iteração sobre objetos para determinar quais objetos devem ser enviados ao cliente em operações como "git fetch", "git rev-list" e "git clone". Para habilitar este novo tipo de bitmap e definir a lógica de sua seleção e uso, foi proposta uma série de configurações "bitmapPseudoMerge": git config bitmapPseudoMerge.all.pattern ‘refs/(heads|tags)/’ git config bitmapPseudoMerge.all.threshold now git config bitmapPseudoMerge.all.stableThreshold never git repack -adb
- Foi implementada uma nova interface de linha de comando para o comando "git config", onde, em vez de opções dispersas para visualizar, renomear e remover configurações e seções, como "—get", "—get-all", "—unset" e "—remove-section", é oferecido um conjunto de subcomandos distintos. Por exemplo, para listar todas as configurações do repositório, agora pode-se usar o comando "git config list", e para visualizar o conteúdo de um parâmetro específico — o comando "git config get ". Para filtrar resultados adicionais usando a opção "—regexp", pode-se definir um filtro baseado em uma expressão regular.
- No protocolo "credential helper", utilizado para transmitir credenciais ao acessar repositórios com acesso restrito, foi adicionada suporte para novos campos "authtype" e "credential", permitindo a criação de manipuladores para sistemas de autenticação HTTP que não se limitam à verificação de login e senha, por exemplo, ao usar Bearer Token no OAuth 2.0. Anteriormente, para trabalhar com esses sistemas de autenticação, era necessário fornecer dados confidenciais em texto claro no parâmetro http.extraHeader. Além disso, o protocolo agora possui a capacidade de salvar o estado de cada manipulador de credenciais para suportar métodos de autenticação em várias etapas usados em protocolos como NTLM e Kerberos.
- Continua o desenvolvimento do backend experimental "reftable" para o armazenamento eficiente de referências a branches e tags no repositório. Este backend utiliza armazenamento em bloco, aplicado no projeto JGit e otimizado para armazenar um grande número de referências (formatos tradicionais de armazenamento de referências geram custos significativos em repositórios com muitas referências devido à necessidade de alojar um grande número de arquivos em um único diretório quando as referências são armazenadas no diretório $GIT_DIR/refs ou à necessidade de reescrever um grande arquivo a cada atualização quando as referências são armazenadas no arquivo $GIT_DIR/packed_refs). Na nova versão, foi adicionada a comando "git refs migrate —ref-format=reftable" para migrar repositórios existentes para o backend "reftable" (anteriormente, o backend só era incluído na inicialização do repositório).
- Na equipe do git, foi adicionada a opção "—no-advice", que desativa todas as mensagens de recomendações e dicas, o que pode ser útil para evitar que o log seja sobrecarregado com informações desnecessárias durante chamadas automatizadas do git.
- O processo de migração de algumas verificações do conjunto de testes para o uso de testes unitários começou, o que simplificará o teste de componentes de baixo nível e melhorará a eficiência do processo de teste na plataforma Windows, onde há grandes sobrecargas ao iniciar um grande número de processos durante a execução de testes implementados como scripts shell.
- O código para análise das configurações de cores agora suporta a representação "#RGB" além de "#RRGGBB".
Fonte: opennet.ru
