Git 2.55

Prezentat lansarea unui sistem distribuit de gestionare a codului sursă Git 2.55. Printre principalele schimbări: includerea implicită a construcției cu Rust, implementarea pentru Linux a procesului fsmonitor, o nouă strategie de repackaging a indexului MIDX incremental, comanda git history fixup pentru corectarea unui commit, optimizarea generării bitmapurilor de accesibilitate a obiectelor, suport pentru executarea paralelă a hook-urilor, comanda git format-rev. Codul Git se răspândește sub licența GPLv2+.

Comparativ cu versiunea anterioară, noua versiune a acceptat 505 modificări, pregătite cu participarea a 100 de dezvoltatori, dintre care 33 au contribuit pentru prima dată la dezvoltarea Git.

Noutăți principale (github.blog, gitlab.com/blog, gitlab.com/git-scm):

  • Implicit sistemul de compozitare suport pentru componente scrise în Rust. Compilatorul rustc adăugat în lista dependențelor de construcție. Pentru a construi fără Rust, se poate folosi flag-ul NO_RUST=1 în timpul execuției utilității make sau -Drust=disabled în timpul configurării meson. Posibilitatea de a dezactiva construcția cu Rust va fi susținută până la ramura Git 3.0, în care Rust va fi inclus în lista dependențelor obligatorii. O interfață pe Rust a fost implementată pentru portabilitate între configurațiile cu hash-uri SHA-1 și SHA-256, precum și unele funcții interne, cum ar fi codificarea și decodificarea valorilor întregi de lungime variabilă. În viitor, se așteaptă o refacere mai consistentă a componentelor interne Git pe Rust.
  • În echipa experimentală "git history", care oferă funcționalități de rescriere a istoriei modificărilor, a fost adăugată operațiunea „git history fixup” pentru corectarea unui commit. Operațiunea fixup permite mutarea modificărilor adăugate prin git add într-un commit anterior și rescrierea automată a tuturor commit-urilor ulterioare, similar cu executarea comenzii git commit —fixup= și lansarea git rebase —autosquash ~.
  • Pentru platforma Linux a fost implementat un proces în fundal fsmonitor, care urmărește modificările din sistemul de fișiere folosind mecanismul inotify și permite evitarea parcurgerii întregului catalog de lucru la executarea unor comenzi precum git status. Activarea se face prin setarea „core.fsmonitor».
  • Comanda git repack a fost adăugată cu modul —write-midx=incremental, care implementează o nouă strategie de actualizare a meta-datelor în indexul MIDX incremental (multi-pack index), permițând evitarea reambalării întregului index. În indexul incremental multi-pack, în loc de un singur index mare care conține informații despre distribuția obiectelor în fișierele pack, se aplică o structură stratificată — fiecare strat acoperind un număr specific de fișiere pack și fiind stocat într-un fișier bitmap separat. Această structură permite adăugarea de date despre obiecte în fișierele pack noi, atașând straturi noi la index fără a reconstruie straturile existente. Comanda git repack —write-midx=incremental permite adăugarea unui nou strat în indexul MIDX incremental, care acoperă fișierele pack recent create. În combinație cu modul de ambalare a repositoarelor —geometric, noua comandă oferă posibilitatea de a combina obiectele noi din mai multe fișiere pack într-un fișier pack mai mare și, dacă este necesar, de a efectua ambalarea și fuziunea mai multor straturi adiacente ale indexului MIDX incremental. Această strategie permite ca, la executarea git repack, să fie rescrise doar straturile superioare, păstrând vechile straturi mari intacte, și, de asemenea, să se evite creșterea necontrolată a lanțului de straturi, menținând numărul total de straturi la un nivel proporțional cu logaritmul numărului total de obiecte.
  • Generarea bitmapurilor de disponibilitate a obiectelor a fost semnificativ optimizată datorită unui nou algoritm de parcurgere a arborelui de obiecte, care elimine recursia inutilă, efectuează caching al pozițiilor obiectelor, sortează bitmapurile înainte de a le combina folosind operația XOR și a fost revizuit codul pentru crearea bitmapurilor de pseudo-fuziune (pseudo-merge). În depozitul de test, optimizările au permis reducerea timpului de generare a bitmapurilor de la 612 la 294 de secunde.
  • A fost implementată posibilitatea executării paralele a sarcinilor independente hook-urilor în fișierele de configurare. Hook-urile care afectează starea comună sau care o iau în considerare, de exemplu, cele care modifică notele de commit sau inspectează indecșii și arborele de lucru, nu pot fi rulate simultan. Cu toate acestea, hook-urile pentru verificarea lint-ului și efectuarea testelor unitare pot fi rulate în paralel. Hook-urile care permit execuția paralelă se configurează prin parametrul hook.numele_huk-ului.parallel = true. Numărul de lucrări care rulează simultan este determinat prin configurarea hook.jobs, hook..jobs sau opțiunea din linia de comandă -j.
  • În echipa git pack-objects, —path-walk a fost implementată capacitatea de a specifica filtre, cum ar fi blob:none, blob:limit=, tree:0, object:type=, sparse: și combine:. În testul efectuat, eliminarea blob-urilor în timpul execuției —path-walk a permis o reducere de 16% a dimensiunii fișierului pack generat.
  • A fost adăugată comanda git format-rev pentru formatarea reviziilor și a numelui obiectelor menționate în listele de commit-uri sau întâlnite în textul arbitrar (de exemplu, poate fi utilizată în hook-uri pentru prelucrarea notelor de commit).

git last-modified | git format-rev —stdin-mode=text —format=%an

Junio C Hamano builtin/commit.c

  • Escaparea majorității secvențelor de control ale terminalului în mesajele informative și textul erorilor transmise de server este activată implicit. Atunci când se accesează un server malițios, astfel de secvențe escape ar fi putut fi folosite pentru a ascunde sau modifica ieșirea, de exemplu, prin secvențe escape pentru a muta cursorul și a curăța textul. Suportul pentru secvențele escape utilizate pentru a evidenția elementele în culori a fost păstrat.
  • Comanda git checkout -m acum salvează automat modificările locale conflictuale în zona stash fără a fi nevoie să rezolvi imediat conflictul.
  • În comanda git push a fost adăugată posibilitatea de a trimite o ramură pe mai multe servere externe Git cu o singură comandă. De exemplu, pentru a trimite ramura main nu doar pe serverul principal, ci și pe oglinzi, poți crea un grup publish din serverele github, gitlab și mirror:

git config remotes.publish "github gitlab mirror"
git push publish main

  • În comanda git log —graph a fost adăugată opțiunea —graph-lane-limit= pentru a limita numărul de benzi verticale în vizualizarea ramurilor, ceea ce permite păstrarea locului pe ecran pentru datele despre commit-uri în repozitorii cu un număr mare de ramuri.

…
* | | | | 619931f561 Combină ramura ‘dl/posix-unused-warning-clang’
|\ \ \ \ \
| * | | | ~ cf48887610 compat/posix.h: simplificare a comparației GIT_GNUC_PREREQ()
| * | | | ~ ffd45926dc compat/posix.h: curățare a GIT_GNUC_PREREQ() și a UNUSED
|\ \ \ \ \~
| * | | | ~ 3f5203eeb4 ls-files: filtrează pathspec înainte de lstat

  • În comenzile git log și git rev-list a fost adăugată opțiunea —max-count-oldest=, care permite selectarea celor mai vechi N commit-uri din interval.

Sursa: linux.org.ru

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster