Predstavljen je novi izdanak distribuiranog sustava za upravljanje izvornih tekstova Git 2.38. Git je jedan od najpopularnijih, najpouzdanijih i najproduktivnijih sustava za upravljanje verzijama, koji pruža fleksibilna sredstva za nelinearni razvoj temeljen na grananju i spajanju grana. Kako bi se osigurala cjelovitost povijesti i otpornost na 'retroaktivne' promjene, koristi se implicitno heširanje cijele prethodne povijesti u svakom commit-u, a također je moguće ovjeriti digitalnim potpisima programa pojedinih tagova i commit-a.
U usporedbi s prošlim izdanjem, nova verzija sadrži 699 promjena, koje su pripremljene uz sudjelovanje 92 programera, od kojih je 24 prvi put sudjelovalo u razvoju. Glavne novine su:
- U glavni sastav uključena je alatka 'scalar', koju je razvila tvrtka Microsoft za upravljanje velikim repozitorijima. Alatka je prvotno napisana na jeziku C#, ali je u git uključena prerađena verzija na jeziku C. Nova alatka se razlikuje od naredbe git uključivanjem dodatnih mogućnosti i postavki prema zadanim postavkama, koje utječu na performanse kada se radi s vrlo velikim repozitorijima. Na primjer, pri korištenju scalar-a primjenjuje se:
- Djelomično kloniranje za rad s nepotpunom kopijom repozitorija.
- Ugrađeni mehanizam za praćenje promjena u datotečnom sustavu (FSMonitor), koji omogućava izbjegavanje pretraživanja cijelog radnog direktorija.
- Indeksi koji obuhvaćaju objekte u različitim pack-datotekama (multi-pack).
- Datoteke commit-grafa s indeksom grafa commit-a, koje se primjenjuju za optimizaciju pristupa informacijama o commit-ima.
- Pozadinski periodični zadaci za održavanje optimalne strukture repozitorija u pozadini, bez blokiranja interaktivne sesije (svakih sat vremena izvodi se zadatak za proaktivno učitavanje svježih objekata iz udaljenog repozitorija i ažuriranje datoteke s grafom commit-a, dok se svake noći pokreće proces pakiranja repozitorija).
- Modus 'sparseCheckoutCone', koji ograničava dopuštene uzorke prilikom djelomičnog kloniranja.
- Naredbi 'git rebase' dodana je opcija '--update-refs' za ažuriranje ovisnih grana koje se sijeku s premještenim granama, kako bi se ručno izbjeglo izvođenje checkout operacija za svaku ovisnu granu za prebacivanje na željeni commit.
- Osigurana je kompatibilnost naredbe «git rm» s djelomičnim indeksima.
- Poboljšano je ponašanje naredbe «git mv A B» prilikom premještanja datoteke iz radnog prostora s djelomičnim indeksima u režimu «cone» u vanjski prostor za koji ovaj režim ne vrijedi.
- Optimiziran je format bitmap datoteka za rad s velikim repozitorijima — dodana je opcionalna indeksna tablica sa popisom odabranih commitova i njihovim pomacima.
- U naredbi «git merge-tree» uveden je novi način rada u kojem se na temelju dvaju navedenih commitova izračunava stablo s rezultatom spajanja, kao da su povijesti tih commitova spojene.
- Dodana je postavka «safe.barerepository» za upravljanje mogućnošću smještanja bare repozitorija (repozitoriji bez radnog područja) unutar drugih git repozitorija. Kada se postavi na «explicit», rad s bare repozitorijima bit će dopušten samo u gornjem direktoriju. Da bi se omogućilo smještanje bare repozitorija u poddirektorije, potrebno je koristiti vrijednost «all».
- U naredbu «git grep» dodana je opcija «-m» («—max-count»), koja je slična istoimenoj opciji u GNU grepu i omogućava ograničavanje broja prikazanih podudaranja.
- U naredbi «ls-files» implementirana je opcija «—format» za prilagodbu prikazanih polja (na primjer, može se uključiti prikaz imena objekta, modova itd.).
- U «git cat-file» prilikom prikazivanja sadržaja objekata omogućeno je uzimanje u obzir poveznica autora s emailom, navedenim u datoteci mailmap.
Izvor: opennet.ru
