Git 2.50: Poboljšanja performansi za velike repozitorije i još mnogo toga

git-2.50

Prije nekoliko dana je objavljeno Izlazak nove verzije projekta Git 2.50, uvođenje više od 600 promjena vođen aktivnom zajednicom koja je ovaj put uključivala 98 programera, uključujući 35 novih saradnika.

Ova nova verzija Gita 2.50 ističe se integracijom novih naredbi (git-diff-pairs), novim funkcijama za čišćenje, filtriranje i održavanje, zamjenom rekurzivnog mehanizma za spajanje sa ORT-om, kao i poboljšanjima performansi i ispravkama grešaka.

Git 2.50 ističe se

U ovoj novoj verziji Gita 2.50, jedna od najvažnijih novih funkcija je optimizacija u tretmanu takozvanih "oštećenja" (cruft packs), To jest, paketi objekata koji su nedostupni ili na koje se ne referenciraju grane ili oznake. Tradicionalno, Git je pohranjivao ove objekte u jednu, veliku datoteku paketa, što je moglo uzrokovati probleme s performansama prilikom ponovnog pakiranja repozitorija s mnogim od ovih stavki.

S novom verzijom, Git vam omogućava da podijelite ove cruft pakete u nekoliko manjih datoteka, što smanjuje korištenje diska i poboljšava performanse ulaza/izlaza za masovne operacije. Osim toga, si unesite opciju –combine-cruft-below-size, što dozvoljava fleksibilnije kombinujte male pakete u jedan nego prethodna opcija –max-cruft-size, bez nametanja ograničenja na kombinovanu veličinu datoteke. Ova nova funkcija je posebno korisna u projektima sa osirotelim objektima raspoređenim u više paketa.

Još jedno poboljšanje usmjereno na velika spremišta je eksperimentalna podrška za postepeno ažuriranje MIDX indeksi , koji pohranjujte informacije o objektima u odvojene slojeve korištenje bitmap datoteka, što omogućava brža ažuriranja kako se dodaju novi commit-ovi. Ovaj napredak je ključan za velike repozitorije kojima su potrebne brze operacije indeksiranja bez potrebe za potpunim ponovnim kreiranjem metapodataka.

Potpuna zamjena rekurzivnog mehanizma za spajanje sa ORT-om

Git 2.50 uvodi veliku promjenu sa trajno uklanjanje rekurzivnog fuzijskog motora tradicionalno. Umjesto toga, upotreba ORT-a je konsolidovana, a moderniji, održiviji i efikasniji fuzijski motor. ORT ne samo da nudi precizniju analizu konflikata, već vam također omogućava da provjerite da li je spajanje moguće bez generiranja dodatnih objekata. Nadalje, naredba merge-tree sada uključuje opciju -quiet za korištenje kao tiha provjera spajanja bez mijenjanja repozitorija.

gitt-diff-pairs: rješenje za probleme skalabilnosti

Pregled koda je nesumnjivo jedan od stubova modernog kolaborativnog razvoja, a razlike ili diff-ovi između revizija igraju važnu ulogu u ovom procesu. Dolaskom Gita 2.50, uvedeno je rješenje dizajnirano za skalabilnost: nova naredba git-diff-pairs.

Tradicionalno, za poređenje dvije revizije koristite komandu poput:

git diff HEAD~1 HEAD

Ovo generira kompletnu zakrpu koja sadrži sve promjene između navedenih revizija. Iako je učinkovita u mnogim slučajevima, može predstavljati problem s performansama pri radu s velikim skupovima modificiranih datoteka.

Zato je git-diff-pairs posebno dizajniran da prima sirove ulazne podatke direktno iz izlaza git diff-tree-a i da efikasno i precizno generiše odgovarajuće zakrpe.

Upotreba je jednostavna kao:

git diff-tree -r -z -M HEAD~ HEAD | git diff-pairs -z

Ova naredba uzima date parove blob objekata i generira tačan diff izlaz, čuvajući kontekstualne informacije i omogućavajući podjelu rada u manje grupe. Ovo otvara vrata paralelnoj obradi, poboljšava efikasnost resursa i olakšava skalabilnost u alatima zasnovanim na diff-u poput GitLaba.

Nove funkcije za čišćenje, filtriranje i održavanje

Git 2.50 uključuje nekoliko dodatnih alata dizajniranih za poboljšanje održavanja repozitorija:

  • Komanda je dodana ispuštanje git reflog-a, što vam omogućava da potpuno izbrišete reflog za određenu granu, idealno za čišćenje historije rada kada više ne trebate održavati prethodne reference.
  • Opcija –filter cat-file –batch je sada dostupan u gitu, omogućavajući vam filtriranje rezultata po tipu objekta.

Pored toga, istaknuto je i nekoliko internih optimizacija:

  • Poboljšana upotreba simboličkih linkova, sa keširanjem prefiksa i smanjenjem redundantnih provjera.
  • Uklanjanje Perl zavisnosti u dokumentaciji i testnim skriptama, njihova zamjena shell funkcijama ili C implementacijama, što ih čini lakšim za kompajliranje na sistemima s minimalističkim konfiguracijama.
  • Uključujući kontroler razlika korisnika za analizu razlika u .ini datotekama.
  • Poboljšana kompatibilnost naredbe git send-email sa SMTP serverima kao što je Outlook.

Konačno, ako ste zainteresirani da saznate više o tome, možete pogledati detalje u sljedeći link.