Lançamento do sistema de controle de versões distribuído Git 2.25

Disponível lançamento do sistema de controle distribuído de textos-fonte Git 2.25.0. 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. Principais novidades:

  • 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 filtros 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/out

    O 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 "git config core.sparseCheckoutCone«, 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 "git rebase —rebase-merges«.
  • 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 Elixir.
  • 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

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