Sistema de control de fonte Git 2.41 dispoñible

Despois de tres meses de desenvolvemento, publicouse o lanzamento do sistema de control de fontes distribuído Git 2.41. Git é un dos sistemas de control de versións máis populares, fiables e de alto rendemento que ofrece ferramentas de desenvolvemento flexibles e non lineais baseadas en ramificación e fusión de ramas. Para garantir a integridade do historial e a resistencia aos cambios retroactivos, utilízase o hash implícito de todo o historial anterior en cada commit, tamén é posible verificar etiquetas individuais e commits con sinaturas dixitais dos desenvolvedores.

En comparación coa versión anterior, aceptáronse 542 cambios na nova versión, preparada coa participación de 95 desenvolvedores, dos cales 29 participaron no desenvolvemento por primeira vez. Principais novidades:

  • Mellorado o manexo de obxectos inalcanzables aos que non se fai referencia no repositorio (non se fai referencia a ramas nin etiquetas). Os obxectos inalcanzables son eliminados polo colector de lixo, pero permanecen no repositorio durante un tempo determinado antes da eliminación para evitar condicións de carreira. Para facer un seguimento do período de obxectos inalcanzables, é necesario vincular as etiquetas a eles co tempo de cambio de obxectos similares, o que non permite almacenalos nun ficheiro de paquete, no que todos os obxectos teñen un tempo de cambio común. Anteriormente, cada obxecto inalcanzable gardábase nun ficheiro separado, o que provocaba problemas se había un gran número de obxectos inalcanzables novos que aínda non estaban suxeitos a eliminación. Na nova versión, de forma predeterminada, o mecanismo "cruft packs" utilízase para empaquetar obxectos inalcanzables, o que permite almacenar todos os obxectos inalcanzables nun ficheiro de paquete e reflectir os datos sobre o tempo de modificación de cada obxecto nunha táboa separada almacenada nun ficheiro. ficheiro coa extensión ".mtimes" e ligado mediante un ficheiro índice coa extensión ".idx".
    Sistema de control de fonte Git 2.41 dispoñible
  • De forma predeterminada, está activado o mantemento dun índice inverso (revindex) no disco para os ficheiros de paquete. Cando se probou nos repositorios torvalds/linux, o uso dun índice inverso permitiunos acelerar as operacións de "git push" con uso intensivo de recursos en 1.49 veces, e operacións sinxelas, como calcular o tamaño dun só obxecto usando "git cat- ficheiro --batch='%(objectsize:disk)' » 77 veces. Os ficheiros ("".rev") cun índice inverso almacenaranse dentro do repositorio no directorio ".git/objects/pack".

    Lembre que Git almacena todos os datos en forma de obxectos, que se colocan en ficheiros separados. Para aumentar a eficiencia de traballar co repositorio, os obxectos colócanse adicionalmente en ficheiros paquete, nos que a información se presenta en forma de fluxo de obxectos seguidos un despois do outro (utilízase un formato similar ao transferir obxectos con git fetch e git). comandos push). Créase un ficheiro índice (.idx) para cada ficheiro de paquete, o que lle permite determinar moi rapidamente a compensación no ficheiro de paquete mediante o cal o identificador de obxecto almacena o obxecto dado.

    O índice inverso incluído na nova versión ten como obxectivo axilizar o proceso de determinación do ID do obxecto a partir da información sobre a localización do obxecto no ficheiro do paquete. Anteriormente, tal conversión realizábase sobre a marcha durante a análise do ficheiro paquete e almacenábase só na memoria, o que non permitía a reutilización destes índices e obrigaba a xerar o índice cada vez. A operación de construír un índice redúcese a construír unha matriz de pares obxecto-posición e a ordenalo por posición, o que pode levar moito tempo para os ficheiros de paquetes grandes.

    Por exemplo, a operación de mostrar o contido dos obxectos, que utiliza un índice directo, foi 62 veces máis rápida que a operación de mostrar o tamaño dos obxectos, para a que non se indexaron os datos de relación posición-obxecto. Despois de usar o índice inverso, estas operacións comezaron a levar aproximadamente o mesmo tempo. Os índices inversos tamén permiten acelerar a operación de envío de obxectos ao executar comandos de recuperación e inserción transferindo directamente datos xa preparados do disco.

    Sistema de control de fonte Git 2.41 dispoñible

  • Engadiuse compatibilidade para pasar cabeceiras WWW-Authenticate entre o controlador de credenciais e o servizo de autenticación ao protocolo "axudante de credenciais" usado para pasar as credenciais ao acceder a repositorios restrinxidos. A compatibilidade coa cabeceira WWW-Authenticate permítelle pasar parámetros de ámbito de OAuth para separar de forma máis granular o acceso dos usuarios aos repositorios e delimitar os ámbitos dispoñibles para as solicitudes.
  • Engadiuse a opción de formato "%(ahead-behind: )", que permite obter inmediatamente información sobre o número de commits presentes ou ausentes nunha determinada rama, en relación con outra rama (canto queda atrás ou por diante dunha rama doutra a nivel de commits). Anteriormente, obter esta información requiría dous comandos separados: "git rev-list --count main..my-feature" para obter o número de commits exclusivos dunha rama e "git rev-list --count my-feature.. main" para obter o número de commits que faltan. Agora tales cálculos pódense reducir a unha única instrución, o que simplifica os controladores de escritura e reduce o tempo de execución. Por exemplo, para mostrar ramas sen fusionar e avaliar se están detrás ou por diante da súa rama principal, pode usar unha liña única: $ git for-each-ref --no-merged=origin/HEAD \ --format=' %(refname:short) %(ahead-behind :origin/HEAD)' \ refs/heads/tb/ | column -t tb/cruft-extra-tips 2 96 tb/for-each-ref: excluír 16 96 tb/roaring-bitmaps 47 3 en lugar do script usado anteriormente, que é 17 veces máis lento: $ git for-each-ref - format='%(refname:short)' --no-merged=origin/HEAD \ refs/heads/tb | while read ref do ahead="$(git rev-list --count origin/HEAD..$ref)" behind="$(git rev-list --count $ref..origin/HEAD)" printf "%s %d %d\n" "$ref" "$ahead" "$behind" feito | columna -t tb/cruft-extra-tips 2 96 tb/por-cada-ref: excluír 16 96 tb/mapas de bits rugidos 47 3
  • Engadida a opción "--porcelain" ao comando "git fetch", que xera saída no formato " ”, menos lexible, pero máis cómodo para analizar en scripts.
  • Engadiuse a configuración "fetch.hideRefs" para acelerar as operacións "git fetch" ocultando parte das ligazóns no repositorio local na fase de verificación de que o servidor enviou o conxunto completo de obxectos, o que aforra tempo ao limitar a comprobación só aos servidores. do que se obteñen directamente os datos. Por exemplo, ao probar nun sistema con repositorios que conteñen un gran número de ligazóns externas rastrexadas, excluíndo todas as ligazóns, excepto as dirixidas ao servidor de destino $remote, reduciuse a operación "git fetch" de 20 minutos a 30 segundos. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ fetch $remote
  • O comando "git fsck" implementa a capacidade de comprobar a corrupción, a correspondencia de suma de verificación e a corrección dos valores en mapas de bits de accesibilidade e índices inversos.
  • O comando "git clone --local" agora mostra un erro ao tentar copiar desde un repositorio que contén ligazóns simbólicas dentro de $GIT_DIR.

Fonte: opennet.ru

Engadir un comentario