Najavljeno je izdavanje distribuiranog sistema za kontrolu izvora Git 2.37. Git je jedan od najpopularnijih, najpouzdanijih i najučinkovitijih sistema kontrole verzija, koji pruža fleksibilne nelinearne razvojne alate zasnovane na grananju i spajanju. Da bi se osigurao integritet istorije i otpornost na retroaktivne promene, implicitno heširanje celokupne prethodne istorije se koristi u svakom urezivanju, takođe je moguće sertifikovati pojedinačne oznake i urezivanja digitalnim potpisima programera.
U odnosu na prethodnu verziju, u novu verziju, pripremljenu uz učešće 395 programera, usvojeno je 75 izmjena, od kojih je 20 prvi put učestvovalo u razvoju. Glavne inovacije:
- Mehanizam parcijalnih indeksa (sparse index), koji pokriva samo dio spremišta, je spreman za široku upotrebu. Djelomični indeksi mogu poboljšati performanse i uštedjeti prostor u spremištima koja izvode operacije djelomičnog kloniranja (sparse-checkout) ili rade s nekompletnom kopijom spremišta. Novo izdanje dovršava integraciju parcijalnih indeksa u naredbe git show, git sparse-checkout i git stash. Najuočljivija prednost performansi od korištenja parcijalnih indeksa vidljiva je sa git stash komandom, koja je u nekim situacijama dovela do 80% povećanja brzine izvršavanja.
- Novi mehanizam “cruft pack” implementiran je za pakovanje nedostupnih objekata koji nisu referencirani u spremištu (nisu referencirani granama ili oznakama). Nedostupne objekte briše sakupljač smeća, ali ostaju u spremištu određeno vrijeme prije nego što se izbrišu kako bi se izbjegli uvjeti utrke. Da bi se pratio period pojavljivanja nedostupnih objekata, potrebno im je priložiti oznake sa vremenom promjene sličnih objekata, što ne dozvoljava njihovo pohranjivanje u jednu datoteku paketa u kojoj svi objekti imaju zajedničko vrijeme promjene. Ranije je spremanje svakog objekta u posebnu datoteku dovodilo do problema kada je postojao veliki broj svježih, nedostupnih objekata koji još nisu bili podobni za brisanje. Predloženi mehanizam “cruft pack-a” omogućava vam da pohranite sve nedostupne objekte u jednu datoteku paketa i odražavate podatke o vremenu modifikacije svakog objekta u zasebnoj tabeli pohranjenoj u datoteci sa ekstenzijom “.mtimes”.
- Za Windows i macOS, postoji ugrađeni mehanizam za praćenje promjena u sistemu datoteka, koji vam omogućava da izbjegnete ponavljanje preko cijelog radnog direktorija prilikom izvođenja operacija kao što je "git status". Ranije su, za praćenje promjena, eksterni uslužni programi za praćenje promjena u FS-u, kao što je Watchman, mogli biti povezani preko kukica, ali je to zahtijevalo instalaciju dodatnih programa i konfiguraciju. Sada je navedena funkcionalnost ugrađena i može se omogućiti pomoću naredbe “git config core.fsmonitor true”.
- U naredbi “git sparse-checkout” podrška za alternativu “—cone” modu, metodu definiranja predložaka za djelomično kloniranje, proglašena je zastarjelom, što omogućava, prilikom određivanja dijela spremišta koji je podložan operacija kloniranja, za izlistanje pojedinačnih datoteka koristeći sintaksu “.gitignore”, koja ne dozvoljava upotrebu za optimizaciju parcijalnih indeksa.
- Povećana fleksibilnost u konfiguraciji poziva fsync() za ispiranje promjena na disk. Podrška za strategiju "batch" sinhronizacije dodata je parametru "core.fsyncMethod", što omogućava ubrzavanje rada pri pisanju velikog broja pojedinačnih datoteka akumuliranjem promjena u predmemoriji za povratak, koja se resetuje jednim fsync() poziv. Test, koji je rezultirao dodavanjem 500 fajlova pomoću komande “git add”, završen je za 0.15 sekundi kada je omogućen novi režim, dok je pozivanje fsync() trajalo 1.88 sekundi za svaki fajl, a bez korišćenja fsync - 0.06 sekundi.
- Naredbe za obilaženje grana poput “git log” i “git rev-list” sada imaju opciju “-since-as-filter=X” koja vam omogućava da filtrirate informacije o urezima koji su stariji od “X”. Za razliku od opcije “—since”, nova komanda je implementirana kao filter koji ne zaustavlja pretragu nakon prvog urezivanja starijeg od navedenog vremena.
- U naredbi “git remote”, kada se specificira “-v” zastavica, prikazuju se informacije o djelomičnim klonovima spremišta.
- Dodata postavka "transfer.credentialsInUrl", koja može imati vrijednosti "upozori", "umri" i "dopusti". Ako je navedeno u parametru “remote. .url" vjerodajnice otvorenog teksta, pokušaj izvođenja operacije "dohvaćanja" ili "push" neće uspjeti s greškom ako je postavka "transfer.credentialsInUrl" postavljena na "die", ili upozorenje ako je postavljeno na "warn".
- Podrazumevano, omogućena je nova implementacija interaktivnog režima naredbe “git add -i”, prepisane sa Perla na C.
izvor: opennet.ru
