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

Foi lançado o release do sistema de controle de versão distribuída Git 2.56. O código do Git é distribuído sob a licença GPLv2+. Em comparação com a versão anterior, a nova versão incorpora 748 mudanças, realizadas por 104 desenvolvedores, dos quais 39 participaram pela primeira vez no desenvolvimento do Git. Principais novidades (1, 2, 3):

  • Foi adicionado o modo “git add —resolved” para resolver conflitos durante a fusão de branches, que verifica os arquivos em busca de marcadores de conflito e, ao detectar um marcador em pelo menos um arquivo, gera um erro, não indexa nenhum dos arquivos e apresenta a lista de arquivos que precisam ser corrigidos. Ao contrário do comando “git add —update”, no novo modo apenas os arquivos em estado de conflito são processados, e os arquivos modificados não relacionados ao conflito são ignorados, permitindo que a fusão das branches seja concluída com segurança, mesmo que haja outras correções não finalizadas no diretório de trabalho (o comando “git add —update” adicionava ao índice todos os arquivos modificados que estavam sendo rastreados no diretório de trabalho).
  • O trabalho com grandes repositórios foi significativamente acelerado pela otimização do algoritmo de busca dos últimos commits comuns durante a fusão de branches e comparação de commits. O processo agora considera commits pertencentes exclusivamente a uma das branches, permitindo interromper a varredura assim que todos os ancestrais comuns possíveis são encontrados, sem perder tempo na busca da história de alterações. Em um dos repositórios testados, a velocidade de busca aumentou em média 20 vezes, enquanto em outro a aceleração chegou a 70 vezes. Ao executar o comando “git merge-base —all v4.8 v4.9” em um repositório com o kernel do Linux, o número de passos de varredura diminuiu de 167 mil para 3,8 mil.
  • Para aplicação em servidores, o modo de reempacotamento “—path-walk” foi adaptado, permitindo a criação de arquivos pack mais compactos ao agrupar objetos por seu caminho na árvore de diretórios (por exemplo, para o repositório Fluent UI, o uso do “—path-walk” permitiu reduzir o tamanho do arquivo pack de 558 MB para 164 MB). Na nova versão, foi implementada a possibilidade de usar o modo “—path-walk” junto com bitmaps de acessibilidade (reachability bitmap) e ilhas de delta (delta island), usados por provedores de git hosting para acelerar o trabalho e isolar forks do repositório principal.
  • Os gargalos que levavam a cálculos excessivos em grandes repositórios foram eliminados: verificações de estado de arquivos desnecessárias durante a gravação na reftable foram removidas; a reanálise da lista foi excluída a cada inserção de um novo arquivo pack; operações com reftable que acumulavam muitas exclusões foram agilizadas; o funcionamento do "git diff" quando restrições de caminhos de arquivos são especificadas foi otimizado. Após as otimizações, a operação com reftable em um grande número de exclusões foi acelerada em 65 vezes (de 13 segundos para 0,2 segundos), e a execução do comando problemático "git diff" no repositório Chromium com 500.000 elementos no índice agora leva 0,07 segundos em vez de 8 minutos.
  • Adicionada a operação "git history drop" à equipe experimental "git history", que oferece recursos para reescrever o histórico de alterações, permitindo a remoção de um commit selecionado com a anexação automática de seus descendentes ao commit pai.
  • Adicionada a linha de comando "git branch --delete-merged 'origin/*' 'topic-*'" para a remoção segura de grupos de ramos locais cujas alterações já foram enviadas para um repositório externo. Máscaras podem ser usadas para filtrar ramos e repositórios. Para analisar candidatos à remoção, sem realmente executar a operação, o sinalizador "--dry-run" pode ser utilizado.
  • Adicionada a linha de comando "git refs create|update|delete|rename", que combina operações de baixo nível para a criação, remoção, renomeação e atualização de referências.
  • Adicionada a opção "--reset-when-found=[]" ao comando "git bisect run", que automaticamente retorna o repositório ao estado anterior ao início da busca ou mantém o commit problemático ativo, sem a necessidade de uma execução separada do comando "git bisect reset".
  • Adicionado o sinalizador "--linearize" ao comando "git replay" para usar uma topologia de mesclagem plana, semelhante a "git rebase --no-rebase-merges", mas sem acessar a árvore de trabalho.
  • Implementado o rastreamento de renomeação de arquivos em histórias de alterações não lineares no comando "git log --follow", como ao mesclar sub-ramos. O caminho para o arquivo agora é fixado separadamente para cada commit pai, tornando o resultado independente da ordem de varredura do histórico de commits.
  • Foi adicionada a possibilidade de aplicar o comando «git repack -a —filter=blob:limit=1m —drop-filtered» para remover grandes objetos blob carregados sob demanda de um repositório externo e que não estão sendo utilizados no índice atual. Ao acessar esses objetos posteriormente, eles serão recarregados automaticamente.
  • Na equipe «git log —graph», foi implementada a adição de recuos para gráficos com várias raízes independentes, permitindo uma separação visual clara entre commits não relacionados.
  • Foi garantida a identificação de erros comuns, como o uso de «git push origin/main» em vez de «git push origin main» ou «git branch —set-upstream-to origin main» em vez de «git branch —set-upstream-to=origin/main», com sugestões sobre o uso da forma correta.

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