Sistema de control de fonts Git 2.41 disponible

Després de tres mesos de desenvolupament, s'ha publicat el llançament del sistema de control de codi font distribuït Git 2.41. Git és un dels sistemes de control de versions més populars, fiables i d'alt rendiment que proporciona eines de desenvolupament flexibles no lineals basades en ramificacions i fusions de branques. Per garantir la integritat de l'historial i la resistència als canvis retroactius, s'utilitza el hashing implícit de tot l'historial anterior a cada commit, també és possible verificar etiquetes individuals i commits amb signatures digitals dels desenvolupadors.

En comparació amb la versió anterior, la nova versió va incloure 542 canvis, preparats amb la participació de 95 desenvolupadors, dels quals 29 van participar en el desenvolupament per primera vegada. Principals innovacions:

  • S'ha millorat el maneig d'objectes inabastables als quals no es fa referència al repositori (no es fa referència per branques o etiquetes). El col·lector d'escombraries elimina els objectes inaccessibles, però romanen al dipòsit durant un cert temps abans de suprimir-los per evitar condicions de carrera. Per fer un seguiment del període d'aparició d'objectes inabastables, cal adjuntar-hi etiquetes amb el temps de canvi d'objectes similars, la qual cosa no permet emmagatzemar-los en un fitxer de paquet en el qual tots els objectes tenen un temps de canvi comú. Anteriorment, cada objecte inaccessible s'emmagatzemava en un fitxer independent, la qual cosa provocava problemes quan hi havia un gran nombre d'objectes inabastables nous que encara no eren aptes per a la supressió. A la nova versió, el mecanisme "cruft packs" s'utilitza de manera predeterminada per empaquetar objectes inabastables, que us permet emmagatzemar tots els objectes inabastables en un fitxer de paquet i les dades sobre el temps de modificació de cada objecte es reflecteixen en una taula separada, emmagatzemada. en un fitxer amb l'extensió “.mtimes” i enllaçat mitjançant un fitxer índex amb l'extensió “.idx”.
    Sistema de control de fonts Git 2.41 disponible
  • El manteniment d'un índex invers al disc per als fitxers paquet està habilitat per defecte. Quan es feia proves al repositori torvalds/linux, l'ús d'un índex invers va permetre accelerar les operacions de "git push" que consumeixen molts recursos en 1.49 vegades, i operacions senzilles com calcular la mida d'un sol objecte mitjançant "git cat- fitxer —batch='%(objectsize:disk)' "77 vegades. Els fitxers (".rev") amb un índex invers s'emmagatzemaran dins del dipòsit al directori ".git/objects/pack".

    Recordeu que Git emmagatzema totes les dades en forma d'objectes, que es troben en fitxers separats. Per augmentar l'eficiència de treballar amb el dipòsit, els objectes es col·loquen addicionalment en fitxers paquet, en els quals la informació es presenta en forma d'un flux d'objectes que se succeeixen (s'utilitza un format similar quan es transfereixen objectes amb git fetch i git push). ordres). Per a cada fitxer de paquet, es crea un fitxer d'índex (.idx), que us permet determinar molt ràpidament el desplaçament del fitxer de paquet en què s'emmagatzema l'objecte donat mitjançant l'identificador d'objecte.

    L'índex invers inclòs a la nova versió està dirigit a optimitzar el procés de determinació de l'identificador d'objecte a partir de la informació sobre la col·locació de l'objecte al fitxer del paquet. Anteriorment, aquesta conversió es realitzava sobre la marxa mentre s'analitzava el fitxer pack i s'emmagatzemava només a la memòria, la qual cosa no permetia reutilitzar índexs similars i obligava a generar l'índex cada vegada. L'operació de construir un índex es redueix a construir una matriu de parells de posició d'objecte i ordenar-la per posició, cosa que pot trigar molt de temps per a fitxers de paquets grans.

    Per exemple, una operació per mostrar el contingut d'objectes, que utilitza un índex directe, va ser 62 vegades més ràpida que una operació per mostrar la mida d'objectes, per a la qual no s'han indexat les dades de posició a objecte. Després d'utilitzar l'índex invers, aquestes operacions van començar a prendre aproximadament el mateix temps. Els índexs inversos també us permeten accelerar les operacions d'enviament d'objectes quan s'executen ordres de recollida i push transferint directament dades ja fetes des del disc.

    Sistema de control de fonts Git 2.41 disponible

  • El protocol "auxiliar de credencials", utilitzat per transferir credencials quan s'accedeix a repositoris amb accés limitat, ha afegit suport per passar capçaleres WWW-Authenticate entre el controlador de credencials i el servei en què es realitza l'autenticació. El suport per a la capçalera WWW-Authenticate us permet passar paràmetres d'àmbit OAuth per a una separació més granular de l'accés dels usuaris als dipòsits i la delimitació dels àmbits disponibles per a les sol·licituds.
  • S'ha afegit l'opció de format "%(ahead-behind:" a l'ordre for-each-ref: )”, que permet obtenir immediatament informació sobre el nombre de commits presents o absents en una branca determinada, en relació amb una altra branca (quant hi ha una branca per darrere o per davant d'una altra a nivell de commit). Anteriorment, per obtenir aquesta informació, calia executar dues ordres separades: “git rev-list —count main..my-feature” per obtenir el nombre de commits exclusius de la branca i “git rev-list —count my-feature”. ..main” per obtenir el nombre de commits que falten. Ara aquests càlculs es poden reduir a una sola ordre, la qual cosa simplifica l'escriptura dels controladors i redueix el temps d'execució. Per exemple, per mostrar les branques que no s'han fusionat i avaluar si estan darrere o per davant de la seva branca principal, podeu utilitzar una línia única: $ git for-each-ref —no-merged=origin/HEAD \ —format ='%(refname:short) %(davant-darrera:origen/HEAD)' \refs/heads/tb/ | column -t tb/cruft-extra-tips 2 96 tb/for-each-ref: exclou 16 96 tb/roaring-bitmaps 47 3 en lloc de l'script utilitzat anteriorment, que s'executa 17 vegades més lent: $ 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" fet | columna -t tb/cruft-extra-tips 2 96 tb/per-cada-ref: exclou 16 96 tb/maps de bits rugents 47 3
  • L'opció "-porcellana" s'ha afegit a l'ordre "git fetch", quan s'especifica, la sortida es genera en el format " ", menys llegible, però més convenient per analitzar en scripts.
  • S'ha afegit la configuració "fetch.hideRefs", que us permet accelerar les operacions "git fetch" amagant algunes de les referències al repositori local en l'etapa de comprovar que el servidor ha enviat un conjunt complet d'objectes, la qual cosa estalvia temps en limitant la comprovació només als servidors dels quals es recuperen directament les dades. Per exemple, quan s'executa una prova en un sistema amb dipòsits que contenen un gran nombre d'enllaços externs supervisats, excloent tots els enllaços excepte els adreçats al servidor de destinació $remote va reduir l'execució de l'operació git fetch de 20 minuts a 30 segons. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ fetch $remote
  • L'ordre "git fsck" ofereix la possibilitat de comprovar la corrupció, el compliment de la suma de verificació i la correcció dels valors en mapes de bits d'accessibilitat i índexs inversos.
  • L'ordre "git clone --local" ara mostra un error quan s'intenta copiar des d'un dipòsit que conté enllaços simbòlics dins de $GIT_DIR.

Font: opennet.ru

Afegeix comentari