Lançamento do sistema de controle de versão Git 2.37

Foi lançado o Git 2.37, uma versão do sistema de controle de versões distribuído Git. Git é um dos sistemas de controle de versões mais populares, confiáveis e de alto desempenho, fornecendo ferramentas flexíveis para desenvolvimento não linear, com base em ramificações e fusões. 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, sendo também possível a verificação digital por meio de assinaturas dos desenvolvedores em tags e commits específicos.

Em comparação com a versão anterior, esta nova versão incorpora 395 alterações, preparadas com a participação de 75 desenvolvedores, dos quais 20 participaram do desenvolvimento pela primeira vez. As principais novidades incluem:

  • Está pronto para uso o mecanismo de índices parciais (sparse index), que cobrem apenas parte do repositório. Os índices parciais permitem melhorar o desempenho e economizar espaço em repositórios onde operações de clonagem parcial (sparse-checkout) são realizadas ou onde se trabalha com uma cópia incompleta do repositório. Nesta nova versão, o trabalho de integração dos índices parciais nos comandos 'git show', 'git sparse-checkout' e 'git stash' foi concluído. O ganho de desempenho mais notável ao utilizar índices parciais é observado no comando 'git stash', cuja velocidade de execução aumentou em até 80% em algumas situações.
  • Um novo mecanismo chamado "cruft packs" foi implementado para empacotar objetos inatingíveis (unreachable) que não têm referências no repositório (nenhum branch ou tag apontando para eles). Os objetos inatingíveis são removidos pelo coletor de lixo, mas permanecem no repositório por um tempo determinado antes da exclusão, a fim de evitar condições de corrida. Para rastrear o período em que os objetos inatingíveis ficam disponíveis, é necessária uma associação de etiquetas com o horário em que esses objetos foram modificados, o que impede seu armazenamento em um único pack-file, onde todos os objetos possuem um tempo de modificação comum. O método anterior de salvar cada objeto em um arquivo separado levava a problemas quando havia um grande número de objetos inatingíveis recentemente criados que ainda não estavam prontos para exclusão. O mecanismo proposto dos "cruft packs" permite armazenar todos os objetos inatingíveis em um único pack-file, enquanto os dados sobre o tempo de modificação de cada objeto são mantidos em uma tabela separada, armazenada em um arquivo com a extensão ".mtimes".
  • Para Windows e macOS, um mecanismo embutido de rastreamento de alterações no sistema de arquivos foi implementado, permitindo que a verificação de operações, como "git status", ocorra sem a necessidade de percorrer todo o diretório de trabalho. Anteriormente, para rastrear alterações via hooks, era possível conectar utilitários externos de rastreamento de alterações no FS, como o Watchman, mas isso exigia a instalação de programas adicionais e configurações. Agora, essa funcionalidade está incorporada e pode ser ativada com o comando "git config core.fsmonitor true".
  • No comando "git sparse-checkout", o suporte ao modo alternativo "—cone" de definição de padrões para clonagem parcial foi declarado obsoleto. Esse método permitia que, ao definir a parte do repositório a ser clonada, arquivos separados fossem listados usando a sintaxe do " .gitignore", o que impossibilita a utilização de índices parciais para otimização.
  • A flexibilidade da configuração da chamada fsync() para descarregar alterações no disco foi aumentada. O parâmetro "core.fsyncMethod" agora suporta a estratégia de sincronização "batch", que acelera o trabalho ao gravar um grande número de arquivos individuais, acumulando alterações em um cache de gravação que é descarregado com uma única chamada fsync(). Um teste realizado, no qual 500 arquivos foram adicionados com o comando "git add", foi concluído em 0,15 segundos com o novo modo ativado, enquanto, ao chamar fsync() para cada arquivo, foram necessários 1,88 segundos, e sem usar fsync foram apenas 0,06 segundos.
  • Nos comandos de navegação de branches, como "git log" e "git rev-list", foi adicionada a opção "--since-as-filter=X", que permite filtrar informações sobre commits cujos tempos de criação são mais antigos do que "X". Diferente da opção "--since", o novo comando é implementado como um filtro, que não para a iteração após o primeiro commit mais antigo que o tempo especificado.
  • No comando "git remote", ao especificar a flag "-v", agora é mostrado informações sobre clones parciais do repositório.
  • Foi adicionada a configuração "transfer.credentialsInUrl", que pode aceitar os valores "warn", "die" e "allow". Se as credenciais em texto claro forem especificadas no parâmetro "remote..url", a tentativa de realizar operações de "fetch" ou "push" será encerrada com um erro se a configuração "transfer.credentialsInUrl" estiver definida como "die", ou com um aviso se estiver definido como "warn".
  • Por padrão, uma nova implementação do modo interativo do comando "git add -i", reescrita de Perl para C, já está em uso.

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