Sistema di cuntrollu di fonte Git 2.41 dispunibule

Dopu trè mesi di sviluppu, a liberazione di u sistema di cuntrollu di fonte distribuitu Git 2.41 hè stata publicata. Git hè unu di i sistemi di cuntrollu di versione più populari, affidabili è d'altu rendiment chì furnisce strumenti di sviluppu flexible non-lineari basati nantu à a ramificazione è a fusione di rami. Per assicurà l'integrità di a storia è a resistenza à i cambiamenti retroattivi, l'hashing implicitu di tutta a storia precedente in ogni cummitteddu hè utilizatu, hè ancu pussibule di verificà e tag individuali è impegni cù signature digitale da i sviluppatori.

In cunfrontu cù a versione precedente, a nova versione include 542 cambiamenti, preparati cù a participazione di sviluppatori 95, di quale 29 hà participatu à u sviluppu per a prima volta. Innuvazioni principali:

  • Gestione mejorata di l'uggetti inaccessibili chì ùn sò micca riferiti in u repository (micca riferiti da rami o tag). L'uggetti inaccessibili sò sguassati da u cullettore di basura, ma restanu in u repository per un certu tempu prima di esse eliminati per evità e cundizioni di razza. Per seguità u periodu di l'occurrence di l'uggetti inaccessibili, hè necessariu attaccà tags à elli cù u tempu di cambiamentu di l'uggetti simili, chì ùn permettenu micca almacenà in un schedariu di pacchettu in quale tutti l'uggetti anu un tempu di cambiamentu cumuni. Prima, ogni ughjettu inaccessibile era almacenatu in un schedariu separatu, chì hà purtatu à prublemi quandu ci era un gran numaru d'uggetti freschi inaccessibili chì ùn eranu ancora eligibili per a eliminazione. In a nova versione, u mecanismu di "cruft packs" hè utilizatu per difettu per imballà l'uggetti inaccessibili, chì vi permette di almacenà tutti l'uggetti inaccessibili in un schedariu di pacchettu, è e dati nantu à u tempu di mudificazione di ogni ughjettu sò riflessi in una tabella separata, almacenata. in un schedariu cù l'estensione ".mtimes" è ligatu cù un schedariu index cù l'estensione ".idx".
    Sistema di cuntrollu di fonte Git 2.41 dispunibule
  • Mantene un indexu inversu nantu à u discu per i schedarii di pacchettu hè attivatu per difettu. Quandu teste nantu à u repositariu torvalds/linux, l'usu di un indice inversu hà permessu di accelerà l'operazioni "git push" intensive in risorse da 1.49 volte, è operazioni simplici cum'è u calculu di a dimensione di un oggettu unicu utilizendu "git cat- file —batch='%(objectsize:disk)' "77 volte. I schedari (".rev") cù un indice inversu seranu guardati in u repository in u cartulare ".git/objects/pack".

    Ricurdativi chì Git guarda tutte e dati in forma d'uggetti, chì si trovanu in schedarii separati. Per aumentà l'efficienza di travaglià cù u repository, l'uggetti sò in più posti in i schedarii di pacchettu, in quale l'infurmazioni sò presentati in forma di un flussu d'uggetti chì seguitanu l'un l'altru (un formatu simili hè utilizatu quandu si trasferisce l'uggetti cù git fetch è git push). cumandamenti). Per ogni schedariu di pacchettu, hè creatu un schedariu d'indici (.idx), chì vi permette di determinà assai rapidamente l'offset in u schedariu di pacchettu in quale l'ughjettu datu hè almacenatu cù l'identificatore di l'ughjettu.

    L'indexu inversu inclusu in a nova versione hè destinatu à ottimisà u prucessu di determinà l'identificatore di l'ughjettu da l'infurmazioni nantu à a piazza di l'ughjettu in u pacchettu. Nanzu, tali cunversione hè stata realizata nantu à a mosca mentre analizzava u schedariu di u pacchettu è hè stata guardata solu in memoria, chì ùn permettenu micca indici simili per esse reutilizati è furzà l'indici per esse generatu ogni volta. L'operazione di custruisce un indice si riduce à a custruzzione di un array di coppie di pusizioni d'ughjettu è à l'ordine per pusizioni, chì pò piglià assai tempu per i schedarii di grande pacchettu.

    Per esempiu, una operazione per vede u cuntenutu di l'uggetti, chì usa un indexu direttu, era 62 volte più veloce di una operazione per vede a dimensione di l'uggetti, per quale a data di pusizione à l'ughjettu ùn era micca indiziata. Dopu aduprà l'indici inversu, sti operazioni cuminciaru à piglià circa u listessu tempu. L'indici inversi permettenu ancu di accelerà l'operazioni di mandatu di l'ughjettu quandu eseguite cumandamenti fetch è push trasferendu direttamente dati pronti da u discu.

    Sistema di cuntrollu di fonte Git 2.41 dispunibule

  • U protocolu di "credential helper", utilizatu per trasfiriri credenziali quandu accede à i repositori cù accessu limitatu, hà aghjustatu supportu per passà WWW-Authenticate headers trà u gestore di credenziali è u serviziu in quale l'autentificazione hè realizata. U supportu per l'intestazione WWW-Authenticate permette di passà i paràmetri di u scopu OAuth per una separazione più granulare di l'accessu di l'utilizatori à i repositori è a delimitazione di l'ambiti dispunibili per e dumande.
  • Aggiunta l'opzione di formattazione "% (ahead-behind:" à u cumandimu per-each-ref: )", chì vi permette di ottene immediatamente infurmazione nantu à u numeru di cummissioni prisenti o assenti in una certa branche, relative à un altru ramu (quantu un ramu hè daretu o davanti à l'altru à u livellu di cummit). In precedenza, per ottene tali informazioni, avete bisognu di eseguisce dui cumandamenti separati: "git rev-list -count main..my-feature" per ottene u numeru di cummissioni unicu à u ramu è "git rev-list -count my-feature". ..main” pè ottene u numeru missing commits. Avà tali calculi ponu esse ridotti à un cumandamentu unicu, chì simplificà a scrittura di i manipulatori è reduce u tempu d'esekzione. Per esempiu, per vede e rami chì ùn sò micca stati fusionati è evaluà s'ellu sò daretu o davanti à u ramu principale, pudete aduprà una linea: $ git for-each-ref —no-merged=origin/HEAD \ —format ='%(refname:short) %(avant-derrière :origine/HEAD)' \refs/heads/tb/ | colonna -t tb/cruft-extra-tips 2 96 tb/for-each-ref-esclude 16 96 tb/roaring-bitmaps 47 3 invece di l'script utilizatu prima, chì corre 17 volte più lento: $ git for-each-ref — format='%(refname:short)' —no-merged=origine/HEAD \ refs/heads/tb | while read ref do ahead="$(git rev-list -count origine/HEAD..$ref)" behind="$(git rev-list -count $ref..origin/HEAD)" printf "%s %d %d\n" "$ref" "$ahead" "$behind" fattu | colonna -t tb/cruft-extra-tips 2 96 tb/per-each-ref-esclude 16 96 tb/roaring-bitmaps 47 3
  • L'opzione "-porcellana" hè stata aghjunta à u cumandimu "git fetch", quandu hè specificatu, l'output hè generatu in u formatu " ", menu leggibile, ma più convenientu per l'analisi in scripts.
  • Aghjunghjite a paràmetra "fetch.hideRefs", chì permette di accelerà l'operazioni "git fetch" ocultendu alcune di e referenze in u repositoriu lucale in a tappa di verificà chì u servitore hà mandatu un inseme cumpletu di oggetti, chì risparmia u tempu limitendu u cuntrollu solu à i servitori da quale i dati sò direttamente recuperati. Per esempiu, quandu eseguite una prova in un sistema cù repositori chì cuntenenu un gran numaru di ligami esterni tracciati, escludendu tutti i ligami eccettu quelli indirizzati à u servitore di destinazione $remote hà riduciutu l'esekzione di l'operazione git fetch da 20 minuti à 30 seconde. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ fetch $remote
  • U cumandamentu "git fsck" furnisce l'abilità di verificà a corruzzione, a conformità di u checksum, è a correttezza di i valori in bitmaps di accessibilità è indici inversi.
  • U cumandamentu "git clone --local" mostra avà un errore quandu pruvate di copià da un repository chì cuntene ligami simbolichi in $GIT_DIR.

Source: opennet.ru

Add a comment