Depois de três meses de desenvolvimento, foi lançada a versão 2.43 do sistema de controle de versões distribuído Git. 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 com base em ramificações e fusões. Para garantir a integridade do histórico e resistência a alterações retroativas, um hashing implícito de todo o histórico anterior é utilizado em cada commit, sendo também possível a verificação com assinaturas digitais dos desenvolvedores para tags e commits específicos.
Em comparação com a versão anterior, esta nova versão incorpora 464 mudanças, preparadas com a participação de 80 desenvolvedores, dos quais 17 participaram do desenvolvimento pela primeira vez. As principais novidades incluem:
- As opções "—filter" e "—filter-to" foram adicionadas ao comando "git repack", permitindo a reorganização do repositório com base em um filtro de objetos específico e, se necessário, mover para um local separado objetos que não atendem ao filtro. Essas opções podem ser utilizadas para dividir o repositório de acordo com certos critérios (por exemplo, para remover objetos desnecessários ou excessivamente grandes), mantendo a capacidade de acessar todas as partes através de clonagem parcial. Por exemplo, para manter blobs no repositório com tamanho inferior a 1 MB e mover os demais objetos grandes para um repositório separado, pode-se executar: $ git init —bare ../backup.git $ git repack -ad —filter='blob:limit=1m' \ —filter-to=../backup.git/objects/pack/pack
A inicialização do repositório por meio de clonagem parcial permite trabalhar com uma cópia incompleta do repositório, tratando corretamente as solicitações de objetos ausentes (quando objetos ausentes forem solicitados, eles serão carregados sob demanda à medida que necessário).
- Foi adicionada a capacidade de trabalhar com múltiplos arquivos pack que contêm informações sobre objetos inalcançáveis (‘cruft packs’), aos quais não existem links no repositório (não referenciados por branches ou tags). Com a nova opção ‘git repack —max-cruft-size’, é possível definir o tamanho máximo de cada arquivo pack e dividir a base de objetos inalcançáveis em uma série de arquivos pack menores. Usar múltiplos arquivos pack pequenos em vez de um grande pode reduzir significativamente as operações de entrada/saída ao reempacotar repositórios com muitos objetos inalcançáveis, já que não será necessário regravar todos os dados para cada operação de reempacotamento.
- Adicionada a detecção de tentativas de reversão dupla de commits através do ‘git revert’ e consideração desse fato na formação da mensagem de reversão (ao reverter novamente, ao invés de ‘Revert: Revert: fix bug’, será gravado ‘Reapply fix bug’, e se a alteração for revertida uma terceira vez, será ‘Revert Reapply fix bug’). $ git revert —no-edit HEAD >/dev/null $ git revert —no-edit HEAD >/dev/null $ git log —oneline a300922 (HEAD -> main) Reapply ‘fix bug’ 0050730 Revert ‘fix bug’ b290810 fix bug
- Foi permitida a combinação das opções ‘—rfc’ e ‘—subject-prefix’. Por exemplo, para gerar um email com o prefixo ‘[RFC PATCH bpf-next]’ no assunto da mensagem, pode-se usar: $ git format-patch —subject-prefix=’PATCH bpf-next’ —rfc
- No comando ‘git log’, agora é possível usar o placeholder ‘%(decorate)’ para mostrar os nomes das branches relacionadas ao definir o formato com a opção ‘—format’, por exemplo: $ git log —format=’%cr%(decorate) (%h) %s’ 3 days ago (HEAD -> master, origin/master, origin/HEAD) (e0939bec27) RelNotes: minor wording fixes in 2.43.0 release notes 7 days ago (tag: v2.43.0-rc1) (dadef801b3) Git 2.43-rc1 7 days ago (8ed4eb7538) Merge branch ‘tb/rev-list-unpacked-fix’
- No ‘git for-each-ref’ e em comandos semelhantes, foi adicionada a possibilidade de aplicar regras .mailmap aos especificadores de formato definidos com a opção ‘—format’, como ‘%(authorname)’ e ‘%(committeremail)’.
Fonte: opennet.ru
