Izdanje sistema za upravljanje izvorima Git 2.56

Objavljen je izdanje distribuiranog sustava za upravljanje izvornih kodova Git 2.56. Git se distribuira pod GPLv2+ licencom. U usporedbi s prethodnim izdanjem, nova verzija uključuje 748 promjena, pripremljenih uz sudjelovanje 104 programera, od kojih je 39 prvi put sudjelovalo u razvoju Gita. Glavne novosti (1, 2, 3):

  • Dodatan je način «git add —resolved» za rješavanje sukoba prilikom spajanja grana, koji provjerava datoteke na prisutnost oznaka sukoba i, kada otkrije oznaku u barem jednoj datoteci, daje grešku, ne indeksira nijednu od datoteka i prikazuje popis datoteka koje trebaju ispravke. Za razliku od naredbe «git add —update», u novom načinu obrađuju se samo datoteke koje se nalaze u stanju sukoba, dok se promijenjene datoteke koje nisu povezane sa sukobom ignoriraju, što omogućava sigurno završavanje spajanja grana, čak i ako se u radnom katalogu nalaze druge nedovršene izmjene (naredba «git add —update» dodavala je u indeks sve ranije praćene promijenjene datoteke u radnom katalogu).
  • Rad s velikim repozitorijima značajno je ubrzan optimizacijom algoritma za traženje posljednjih zajedničkih komita prilikom spajanja grana i usporedbe komita. U procesu rada sada se uzimaju u obzir komiti koji pripadaju isključivo jednoj od grana, što omogućava zaustavljanje skeniranja odmah nakon pronalaska svih mogućih zajedničkih predaka, ne trošeći vrijeme na daljnje pretraživanje povijesti izmjena. U jednom od testiranih repozitorija brzina pretraživanja povećana je u prosjeku 20 puta, dok je u drugom ubrzanje dostizalo 70 puta. Pri izvršavanju naredbe «git merge-base —all v4.8 v4.9» u repozitoriju s jezgrom Linux, broj koraka obilaska smanjen je sa 167 tisuća na 3.8 tisuća.
  • Za serversku primjenu prilagođen je način prepakiranja «—path-walk», koji omogućava stvaranje kompaktnijih pack-datoteka grupiranjem objekata prema njihovim putanjama u stablu direktorija (na primjer, za repozitorij Fluent UI korištenje «—path-walk» omogućilo je smanjenje veličine pack-datoteke s 558 MB na 164 MB). U novoj verziji implementirana je mogućnost korištenja načina «—path-walk» zajedno s bitnim kartama dostupnosti (reachability bitmap) i delta otocima (delta island), koji se koriste u git-hostingima za ubrzanje rada i izolaciju forkova od glavnog repozitorija.
  • Suze su uklonjene, što je dovelo do prekomjernih izračuna u velikim repozitorijima: uklonjene su nepotrebne provjere stanja datoteka pri zapisivanju u reftable; isključeno ponovno skeniranje popisa pri svakoj inserciji novog pack-datoteke; ubrzane su operacije s reftable-om u kojima se nakupilo puno zapisnika o brisanju; optimiziran je rad 'git diff' kada su postavljena ograničenja po putanjama datoteka. Nakon optimizacija, rad s reftable-om pri velikom broju brisanja ubrzao se 65 puta (s 13 sekundi na 0,2 sekundi), a izvršenje problematične naredbe 'git diff' u Chromium repozitoriju s 500000 stavki u indeksu sada traje 0,07 sekundi umjesto 8 minuta.
  • Eksperimentalnoj ekipi 'git history', koja pruža mogućnosti za prepisivanje povijesti promjena, dodana je operacija 'git history drop' za brisanje odabranog commit-a s automatskim povezivanjem njegovih potomaka s roditeljskim commit-om.
  • Dodana je naredba 'git branch —delete-merged ‘origin/*’ ‘topic-*'’ za sigurno uklanjanje grupa lokalnih grana čije su promjene već prenesene u vanjski repozitorij. Za filtriranje grana i repozitorija dopuštena je upotreba maski. Za analizu kandidata za brisanje, bez stvarnog izvršavanja operacije, može se koristiti zastavica '—dry-run'.
  • Dodana je naredba 'git refs create|update|delete|rename', koja objedinjuje niskonivojske operacije za stvaranje, brisanje, preimenovanje i ažuriranje referenci.
  • U naredbu 'git bisect run' dodana je opcija '—reset-when-found=[]', koja automatski vraća repozitorij u stanje prije početka pretraživanja ili zadržava aktivnim problematični commit, bez potrebe za odvojenim pokretanjem naredbe 'git bisect reset'.
  • U naredbu 'git replay' dodana je zastavica '—linearize' za korištenje ravne topologije spajanja, analogno 'git rebase —no-rebase-merges', ali bez pozivanja na radno stablo.
  • U naredbi 'git log —follow' implementirano je praćenje preimenovanja datoteka u nelinearnoj povijesti promjena, na primjer, prilikom spajanja podgrana. Putanja do datoteke sada se bilježi odvojeno za svaki roditeljski commit, što čini rezultat neovisnim o redu prolaska kroz povijest commit-a.
  • Dodana je mogućnost korištenja naredbe «git repack -a —filter=blob:limit=1m —drop-filtered» za uklanjanje velikih blob-objekata koji su učitani na zahtjev iz vanjskog repozitorija i nisu korišteni u trenutnom indeksu. Kada se kasnije pristupi tim objektima, oni će se automatski ponovno učitati.
  • U naredbi «git log —graph» za grafove s više neovisnih korijena implementirano je dodavanje uvlačenja za jasno odvajanje nes povezanih commit-a.
  • Osigurano je prepoznavanje uobičajenih tipfelera, poput upisa «git push origin/main» umjesto «git push origin main» ili «git branch —set-upstream-to origin main» umjesto «git branch —set-upstream-to=origin/main», i ispis poruke sa savjetom o korištenju ispravne verzije.

Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster