Predstavljen je izdanak distribuiranog sustava za upravljanje izvorima Git 2.55. Među ključnim promjenama: uključivanje podrške za Rust prema zadanim postavkama, implementacija procesa fsmonitor za Linux, nova strategija ponovnog pakiranja inkrementalnog MIDX indeksa, naredba 'git history fixup' za ispravljanje komita, optimizacija generiranja bitmapsa raspoloživosti objekata, podrška za paralelno izvršavanje hook-ova, naredba 'git format-rev'. Git kod se distribuira pod GPLv2+ licencom.
U usporedbi s prošlim izdanjem, nova verzija uključuje 505 promjena, koje su pripremali 100 razvojnih inženjera, od kojih je 33 prvi put sudjelovalo u razvoju Gita. Najvažnije novosti (1, 2, 3):
- Podrška za komponente napisane u Rustu uključena je prema zadanim postavkama. Kompajler rustc
dodana je među ovisnosti za gradnju. Za gradnju bez Rusta možete koristiti opciju 'NO_RUST=1' prilikom pokretanja make alata ili '-Drust=disabled' prilikom izvršavanja 'meson configure'. Mogućnost onemogućavanja gradnje s Rustom bit će podržana do verzije Git 3.0, u kojoj će Rust postati obavezna ovisnost. Implementirana je slojnica na jeziku Rust za prenosivost između konfiguracija s hash-evima SHA-1 i SHA-256, kao i neke unutarnje funkcije, poput kodiranja i dekodiranja cijelih brojeva varijabilne duljine. U budućnosti se očekuje prepravka većih unutarnjih komponenti Gita na Rustu. - U eksperimentalnu naredbu 'git history', koja omogućava prepisivanje povijesti promjena, dodana je operacija 'git history fixup' za ispravljanje komita. Operacija 'fixup' omogućava premještanje promjena dodanih putem 'git add' u raniji komit i automatsko prepisivanje svih sljedećih komita po uzoru na izvođenje naredbe 'git commit --fixup=' i pokretanje 'git rebase --autosquash ~'.
- Za Linux platformu implementiran je pozadinski proces fsmonitor, koji prati promjene u datotečnom sustavu putem inotify mehanizma i omogućava izbjegavanje pretraživanja cijelog radnog direktorija prilikom izvršavanja naredbi poput 'git status'. Uključivanje se vrši putem postavke 'core.fsmonitor'.
- U naredbu «git repack» dodan je režim «—write-midx=incremental», koji implementira novu strategiju ažuriranja metapodataka u inkrementalnom MIDX indeksu (multi-pack index), omogućujući izbjegavanje ponovnog pakiranja cijelog indeksa. U inkrementalnom višepak etnom indeksu umjesto jednog velikog indeksa, koji sadrži informacije o raspodjeli objekata po pack datotekama, koristi se podjela na slojeve — svaki sloj obuhvaća određeni broj pack datoteka i pohranjuje se u zasebnoj bitmap datoteci. Ova struktura omogućava dodavanje podataka o objektima u novim pack datotekama u indeks, pričvršćujući nove slojeve na indeks bez rekonstrukcije postojećih slojeva.
Naredba «git repack —write-midx=incremental» omogućuje dodavanje novog sloja u inkrementalni MIDX indeks, obuhvaćajući nedavno kreirane pack datoteke. U kombinaciji s režimom pakiranja repozitorija «—geometric», nova naredba omogućava objedinjavanje novih objekata iz više pack datoteka u jedan veći pack datoteku i, ako je potrebno, provoditi pakiranje i spajanje nekoliko susjednih slojeva inkrementalnog MIDX indeksa. Ova strategija omogućava da se prilikom izvršenja «git repack» prepisuju samo gornji slojevi, ostavljajući stare velike slojeve netaknutima, kao i isključuje nekontrolirano širenje lanca slojeva, održavajući ukupan broj slojeva na razini proporcionalnoj logaritmu ukupnog broja objekata.
- Značajno je optimizirana generacija bitmaps dostupnosti objekata zahvaljujući novom algoritmu pretraživanja stabla objekata, koji isključuje suvišnu rekurziju, predmemoriranje pozicija objekata, sortiranje bitmaps prije njihovog spajanja operacijom XOR i preradom koda za stvaranje bitmaps pseudo-spajanja (pseudo-merge). U testnom repozitoriju optimizacije su omogućile smanjenje vremena generacije bitmaps s 612 na 294 sekunde.
- Omogućena je paralelna izvedba neovisnih hook-ova u konfiguracijskim datotekama. Hook-ovi koji utječu na zajedničko stanje ili uzimaju u obzir takvo stanje, poput onih koji mijenjaju bilješke o commitima ili inspekciju indeksa i radnog stabla, ne mogu se pokretati paralelno. Međutim, hook-ove za provjeru linterskim alatima i izvođenje unit testova moguće je pokretati paralelno. Hook-ove koji omogućuju paralelnu izvedbu konfiguriramo putem parametra „hook.ime_huka.parallel = true“. Broj istovremeno pokretanih radnih zadataka definira se kroz postavku hook.jobs, hook..jobs ili opciju naredbenog retka „-j“.
- U timu „git pack-objects —path-walk“ omogućena je opcija za određivanje filtara, kao što su „blob:none“, „blob:limit=“, „tree:0“, „object:type=“, „sparse:“ i „combine:“. U provedenom testu, odbacivanje blobova prilikom izvođenja „—path-walk“ omogućilo je smanjenje veličine generiranog pack datoteke za 16%.
- Dodana je naredba „git format-rev“ za formatiranje revizija i imena objekata koji se spominju u popisima commit-a ili se nalaze u proizvoljnom tekstu (npr. može se koristiti u hook-u za obradu bilješki o commitima).
git last-modified | git format-rev —stdin-mode=text —format=%an
Junio C Hamano builtin/commit.c
- Uključeno je prema zadanim postavkama ekrane većine kontrolnih sekvenci terminala u informativnim porukama i tekstu grešaka koje se šalju serverom. Pri pozivanju zlonamjernog poslužitelju takve escape-sekvencije mogle su se koristiti za skrivene ili modificirane izlaze, na primjer, putem escape-sekvencija za pomak kursora i brisanje teksta. Održana je podrška za escape-sekvencije za isticanje elemenata bojom.
- Naredba „git checkout -m“ sada automatski sprema sukobljene lokalne promjene u stash bez potrebe za trenutačnim rješavanjem konflikta.
- U naredbi „git push“ dodana je mogućnost slanja grane na nekoliko vanjskih Git poslužitelja jednim naredbom. Na primjer, za prijenos grane main ne samo na glavni poslužitelj, već i na zrcala, možete stvoriti grupu „publish“ od poslužitelja „github“, „gitlab“ i „mirror“:
git config remotes.publish „github gitlab mirror“
git push publish main - U tim «git log —graph» dodana je opcija «—graph-lane-limit=» za ograničavanje broja vertikalnih traka prilikom vizualizacije grana, što omogućuje ostavljanje prostora na ekranu za podatke o commitima u repozitorijima s velikim brojem grana.
…
* | | | | 619931f561 Spoji granu ‘dl/posix-unused-warning-clang’
|\ \ \ \ \
| * | | | ~ cf48887610 compat/posix.h: pojednostavi usporedbu GIT_GNUC_PREREQ()
| * | | | ~ ffd45926dc compat/posix.h: očisti GIT_GNUC_PREREQ() i UNUSED
|\ \ \ \ \~
| * | | | ~ 3f5203eeb4 ls-files: filtriraj pathspec prije lstat - U komandama «git log» i «git rev-list» dodana je opcija «—max-count-oldest=, koja omogućuje odabir N najstarijih commitova u rasponu.
Izvor: opennet.ru
