Foi lançada a versão 2.38 do sistema de controle de versões distribuído Git. O Git é uma das ferramentas de controle de versão mais populares, confiáveis e de alto desempenho, que fornece recursos flexíveis para desenvolvimento não linear, baseados em 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, além da possibilidade de autenticação digital por meio das assinaturas dos desenvolvedores em tags e commits específicos.
Em comparação à versão anterior, a nova versão incorpora 699 alterações, com a participação de 92 desenvolvedores, dos quais 24 contribuíram pela primeira vez. Principais novidades:
- A nova versão inclui a ferramenta "scalar", desenvolvida pela Microsoft para gerenciar grandes repositórios. A ferramenta foi originalmente escrita em C#, mas uma versão reescrita em C foi incluída no Git. A nova ferramenta se destaca por incluir, por padrão, funcionalidades e configurações adicionais que impactam a performance ao trabalhar com repositórios muito grandes. Por exemplo, ao utilizar o scalar, aplicam-se:
- Clonagem parcial para trabalhar com uma cópia incompleta do repositório.
- Mecanismo embutido de rastreamento de mudanças no sistema de arquivos (FSMonitor), permitindo evitar a varredura de todo o diretório de trabalho.
- Índices que abrangem objetos em diferentes arquivos de pacotes (multi-pack).
- Arquivos commit-graph com índice do gráfico de commits, usados para otimizar o acesso à informação sobre commits.
- Trabalhos periódicos em segundo plano para manter a estrutura do repositório otimizada sem bloquear a sessão interativa (trabalhos de pré-carregamento de novos objetos do repositório remoto são executados a cada hora e um processo de empacotamento do repositório é iniciado toda noite).
- Modo "sparseCheckoutCone", que limita os padrões permitidos durante a clonagem parcial.
- A opção "--update-refs" foi adicionada ao comando "git rebase" para atualizar branches dependentes que se cruzam com as branches móveis, evitando que operações de checkout manuais sejam necessárias em cada branch dependente para alternar para o commit desejado.
- A compatibilidade do comando «git rm» com índices parciais foi garantida.
- O comportamento do comando «git mv A B» ao mover um arquivo da área de trabalho com índices parciais para a área externa, onde esse modo não se aplica, foi melhorado.
- Foi otimizado o formato de arquivos bitmap para trabalhar com grandes repositórios — uma tabela de índice opcional com a lista de commits selecionados e seus deslocamentos foi adicionada.
- Um novo modo foi implementado no comando «git merge-tree», onde, com base em dois commits especificados, é calculada uma árvore com o resultado da mesclagem, como se as histórias desses commits tivessem sido unidas.
- Foi adicionada a configuração «safe.barerepository» para controlar a possibilidade de hospedar repositórios bare (repositórios sem uma área de trabalho) dentro de outros repositórios git. Ao ser definida como «explicit», será permitido trabalhar somente com repositórios bare hospedados no diretório superior. Para permitir que repositórios bare sejam hospedados em subdiretórios, deve-se usar o valor «all».
- Uma opção «-m» («—max-count») foi adicionada ao comando «git grep», semelhante à opção homônima no GNU grep, permitindo limitar o número de correspondências exibidas.
- Uma opção «—format» foi implementada no comando «ls-files» para personalizar os campos exibidos (por exemplo, é possível incluir a exibição do nome do objeto, modos, etc.).
- No «git cat-file», ao mostrar o conteúdo dos objetos, foi implementada a capacidade de considerar associações de autores a emails, conforme definido no arquivo mailmap.
Fonte: opennet.ru
