lançamento do sistema de controle distribuído de textos-fonte . O Git é um dos sistemas de controle de versão mais populares, confiáveis e de alto desempenho, oferecendo ferramentas flexíveis para desenvolvimento não linear, baseadas em ramificações e fusões de ramos. 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 possível também a autenticação com assinaturas digitais de desenvolvedores em tags e commits específicos.
Comparado à versão anterior, a nova versão inclui 504 alterações, desenvolvidas por 64 desenvolvedores, dos quais 12 participaram pela primeira vez. :
- Foi realizada a transição padrão para do protocolo de comunicação Git, que é utilizado ao conectar remotamente o cliente ao servidor Git. A segunda versão do protocolo se destaca por permitir a filtragem de branches e tags do lado do servidor, retornando ao cliente uma lista reduzida de referências. Anteriormente, ao executar qualquer comando de fetch, o cliente sempre recebia a lista completa de referências em todo o repositório, mesmo quando apenas uma branch estava sendo atualizada ou quando verificava a validade de sua cópia do repositório. Outra inovação significativa é a capacidade de adicionar novas funcionalidades ao protocolo à medida que novas funcionalidades aparecem nas ferramentas. O código do cliente permanece compatível com o antigo protocolo e pode continuar a trabalhar com servidores novos e antigos, revertendo automaticamente para a primeira versão, caso o servidor não suporte a segunda.
- O comando ‘git config’ ganhou a opção ‘—show-scope’ para facilitar a identificação de onde determinadas configurações estão definidas. O Git permite definir configurações em diferentes locais: no repositório (.git/info/config), no diretório do usuário (~/.gitconfig), no arquivo de configuração do sistema (/etc/gitconfig) e através de opções de linha de comando e variáveis de ambiente. Ao executar ‘git config’, muitas vezes é difícil entender exatamente onde a configuração desejada foi definida. Para resolver essa questão, havia a opção ‘—show-origin’, mas ela apenas mostra o caminho do arquivo onde a configuração está definida, o que é útil se você pretende editar o arquivo, mas não ajuda se você precisa alterar o valor através de ‘git config’ usando as opções ‘—system’, ‘—global’ ou ‘—local’. A nova opção ‘—show-scope’ exibe o contexto em que as variáveis foram definidas e pode ser utilizada juntamente com ‘—show-origin’:
$ git —list —show-scope —show-origin
global file:/home/user/.gitconfig diff.interhunkcontext=1
global file:/home/user/.gitconfig push.default=current
[…]
local file:.git/config branch.master.remote=origin
local file:.git/config branch.master.merge=refs/heads/master$ git config —show-scope —get-regexp ‘diff.*’
global diff.statgraphwidth 35
local diff.colormoved plain$ git config —global —unset diff.statgraphwidth
- Nas configurações de vinculação É permitido o uso de máscaras em URLs. Qualquer configuração HTTP e credenciais no Git podem ser definidas tanto para todas as conexões (http.extraHeader, credential.helper) quanto para conexões associadas a URLs (credential.https://example.com.helper, credential.https://example.com.helper). Até agora, o uso de máscaras, como *.example.com, era permitido apenas para configurações HTTP, mas não era suportado para a associação de credenciais. No Git 2.26, essas diferenças foram eliminadas e, por exemplo, agora é possível associar um nome de usuário a todos os subdomínios:
[credential "https://*.example.com"]
username = ttaylorr
- Continua a expansão do suporte experimental a clonagens parciais (partial clones), permitindo transferir apenas uma parte dos dados e trabalhar com uma cópia incompleta do repositório. A nova versão adicionou o novo comando "git sparse-checkout add", que permite adicionar diretórios individuais para aplicar a operação de "checkout" apenas a parte da árvore de trabalho, em vez de listar todos esses diretórios de uma vez com o comando "git sparse-checkout set" (é possível adicionar um diretório de cada vez, sem ter que redigir toda a lista novamente).
Por exemplo, para clonar o repositório git/git sem transferir blobs, restringindo a verificação apenas ao diretório raiz da cópia de trabalho e fazendo uma marcação separada para extrair os diretórios "t" e "Documentation", pode-se especificar:$ git clone --filter=blob:none --sparse git@github.com:git/git.git
$ cd git
$ git sparse-checkout init --cone$ git sparse-checkout add t
….
$ git sparse-checkout add Documentation
….
$ git sparse-checkout list
Documentação
t - A performance do comando "git grep", utilizado para buscas tanto no conteúdo atual do repositório quanto nas revisões históricas, foi significativamente aumentada. Para acelerar as buscas, era permitido escanear o conteúdo da árvore de trabalho usando múltiplas threads ("git grep --threads"), mas as buscas nas revisões históricas eram monothread. Agora, essa limitação foi eliminada por meio da implementação da capacidade de paralelizar operações de leitura do repositório de objetos. Por padrão, o número de threads é definido igual ao número de núcleos da CPU, o que na maioria dos casos agora não requer a definição explícita da opção "--threads".
- Adicionada a funcionalidade de autocompletar a entrada de subcomandos, caminhos, referências e outros argumentos do comando "git worktree", permitindo trabalhar com várias cópias de trabalho do repositório.
- Suporte foi adicionado a cores brilhantes, para as quais existem sequências de escape ANSI. Por exemplo, nas configurações de cores de destaque "git config --color" ou "git diff --color-moved" através da opção "--format" para azul brilhante pode-se especificar "%C(brightblue)".
- Uma nova versão do script foi adicionada , que fornece integração com o mecanismo para acelerar o rastreamento de alterações em arquivos e a adição de novos arquivos. Após a atualização do git, é necessário hook no repositório.
- Otimizações foram adicionadas para acelerar operações de clonagem parcial, relacionadas ao uso de mapas de bits
(bitmap machinery) para evitar a varredura completa de todos os objetos durante a filtragem de saída. A verificação de blobs (--filter=blob:none e --filter=blob:limit=n) durante a clonagem parcial agora é realizada
significativamente mais rápido. O GitHub anunciou a aplicação de patches com essas otimizações e suporte experimental para clonagem parcial. - O comando "git rebase" foi transferido para um novo backend, utilizando por padrão o mecanismo 'merge' (anteriormente usado para "rebase -i") em vez de 'patch+apply'. Em alguns aspectos, os backends diferem, por exemplo, após a continuação da operação após resolver um conflito (git rebase --continue), o novo backend oferece editar a mensagem do commit, enquanto o antigo apenas utilizava a antiga mensagem. Para retornar ao comportamento anterior, pode-se usar a opção "--apply" ou definir a variável de configuração 'rebase.backend' como 'apply'.
- Um exemplo do manipulador de parâmetros de autenticação, especificados através do .netrc, foi reformulado para ser utilizável imediatamente.
- Foi adicionada a configuração gpg.minTrustLevel para determinar o nível mínimo de confiança para vários elementos que realizam verificação de assinatura digital.
- As opções "--pathspec-from-file" foram adicionadas ao "git rm" e ao "git stash".
- O aprimoramento dos conjuntos de testes continua como parte da preparação para a transição do algoritmo de hash SHA-1 para SHA-2.
Fonte: opennet.ru
