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 com a versão anterior, a nova versão contém 583 alterações, feitas com a participação de 84 desenvolvedores, dos quais 32 participaram pela primeira vez do desenvolvimento. :
- A possibilidade de clonagem parcial está se aproximando da estabilização e prontidão total, permitindo transferir apenas parte dos dados e trabalhar com uma cópia incompleta do repositório. Em uma clonagem normal, todos os dados são copiados do repositório, incluindo cada versão de cada arquivo a partir do histórico de alterações. Para repositórios muito grandes, a cópia de dados resulta em aumento significativo de tráfego e espaço em disco, mesmo que o desenvolvedor esteja interessado apenas em um subconjunto de arquivos. Para simplificar a obtenção de apenas parte da árvore de trabalho dos textos fonte, a nova versão propõe um comando experimental "sparse-checkout" e uma nova opção "—sparse" para o comando "clone".
Anteriormente, o processo de clonagem seletiva era realizado através da definição para filtrar conteúdo desnecessário e da opção "—no-checkout" para desativar o preenchimento dos arquivos ausentes. Depois disso, antes de executar a operação checkout, era necessário habilitar a configuração core.sparseCheckout e definir no arquivo .git/info/sparse-checkout a lista de padrões de caminhos a serem excluídos. Por exemplo, para clonar sem blobs e proibir a extração de arquivos de diretórios aninhados com profundidade 2 ou mais, poderia ser executado:
git clone —filter=blob:none —no-checkout /your/repository/here repo
$ cd repo
$ cat >.git/info/sparse-checkout <<EOF
/*
!/*
EOF
$ git config core.sparseCheckout 1
$ git checkout .O novo comando "git sparse-checkout" simplifica significativamente o trabalho e reduz o processo de organização do trabalho com repositórios incompletos a comandos:
git clone —filter=blob:none —sparse /your/repository/here repo
git sparse-checkout set /path/to/check/outO comando sparse-checkout permite definir uma lista de caminhos para checkout (set) sem a necessidade de configuração manual do .git/info/sparse-checkout, bem como exibir a lista atual de caminhos (list) e habilitar ou desabilitar checkouts parciais (enable/disable).
Para otimizar o trabalho com repositórios muito grandes e listas de padrões, foi proposta a configuração "«, limitando os modelos permitidos (em vez de modelos arbitrários .gitignore, é possível especificar se todos os caminhos e todos os arquivos em um subdiretório definido devem ser extraídos). Por exemplo, se em um grande repositório existir um diretório "A/B/C" e todo o trabalho estiver concentrado no subdiretório "C", então, ao ativar o modo sparseCheckoutCone, o comando "git sparse-checkout set A/B/C" extrairá todo o conteúdo de "C", mas de "A" e "B" extrairá apenas as partes necessárias para trabalhar com "C".
- Da documentação ("git rebase -h") foram removidas todas as menções à opção "—preserve-merges", que foi declarada obsoleta, e em seu lugar, para transferir um conjunto de commits, deve-se usar "«.
- Para melhorar a legibilidade das mensagens com patches enviadas para listas de discussão, foi adicionada a opção "git format-patch —cover-from-description subject", ao indicar a qual a primeira seção do texto da descrição do branch é usada como o assunto da carta de apresentação para o conjunto de patches.
- Foi implementado o suporte à combinação do comando "git apply —3way" e da configuração "merge.conflictStyle" ("git apply" agora considera o estilo da descrição do conflito de merge.conflictStyle ao resolver conflitos, quando necessário, após tentar aplicar o arquivo com o patch ao repositório).
- O código para determinar funções, utilizado em operações como "git diff/grep —show-function/—function-context", foi expandido para suportar a determinação de limites de funções em programas na linguagem .
- Em "git add", "git commit", "git reset" e outros comandos, foi adicionada uma nova opção "—pathspec-from-file", que permite carregar uma lista de caminhos a partir de um arquivo ou fluxo de entrada, em vez de enumerá-los na linha de comando.
- Resolvido o problema na definição de renomeações a nível de diretório ao gravar commits. A definição não funcionava no caso de mover o conteúdo de um subdiretório para a raiz do repositório.
- Uma implementação inicial do reestilizado comando "git add -i" foi proposta, permitindo adicionar conteúdo modificado em modo interativo, reescrita de Perl para C. Uma reestruturação semelhante do comando "git add -p" está em andamento.
- Foi feito um refatoramento do comando "git log —graph", que gera uma imagem ASCII do gráfico com o histórico de mudanças no repositório. A reestruturação permitiu melhorar significativamente e simplificar a saída sem distorcer a estrutura do histórico, que, por exemplo, resolveu o problema da representação do gráfico excedendo a largura da linha do terminal.
- A opção "git log --format=.." que permite alterar o formato da saída,
foi ampliada com suporte para as flags "l/L" para exibir apenas a parte do endereço de e-mail antes do símbolo "@" (por exemplo, útil quando todos os desenvolvedores têm e-mails no mesmo domínio). - Foi adicionada ao comando "git submodule" a subcomando "set-url".
- Os conjuntos de testes foram atualizados em preparação para a transição para
o algoritmo de hash SHA-2 em vez de SHA-1.
Fonte: opennet.ru
