Pärast kahte kuud arendust on välja antud jaotatud lähtekoodi haldamise süsteemi Git 2.39 versioon. Git on üks populaarsemaid, usaldusväärsemaid ja kõrgjõudlusega versioonihalduse süsteeme, pakkudes paindlikke vahendeid mittelineaarses arenduses, mis põhinevad harude ja ühenduste haldamisel. Ajaloo terviklikkuse ja tagasivaatelike muudatuste vältimise tagamiseks kasutatakse implitsiitset hashimist kogu eelmise ajaloo kohta igas commit'is, samuti on võimalik arendajate digitaalsete allkirjadega kinnitada eraldi silte ja commit'e.
Uues versioonis on võrreldes eelmise väljaandega vastu võetud 483 muudatust, mille ettevalmistamisel osales 86 arendajat, kellest 31 osales arenduses esmakordselt. Peamised uuendused:
- „git shortlog“ käsku, mis on mõeldud muudatuste ajaloo statistika kokkuvõtete kuvamiseks, on lisatud võimalus „—group“ commit'ite vabaks grupeerimiseks, mitte ainult autori või committer'i alusel. Näiteks, et kuvada arendajate loetelu, kus on teave muudatuste arvu kohta, mis arvestab ka abistajaid, kes on mainitud väljas „Co-authored-by“, võib kasutada käsku: git shortlog -ns —group=author —group=trailer:co-authored-by
Вывод shortlog можно агрегировать при помощи спецификаторов форматирования и опция «—group» позволяет существенно упростить создание сложных отчётов и избавиться от выполнении дополнительных команд сортировки. Например, для создания отчёта с информацией о том, сколько коммитов для заданного релиза было принято в каждом месяце, можно указать: git shortlog v2.38.0.. —date=’format:%Y-%m’ —group=’%cd’ -s 2 2022-08 47 2022-09 405 2022-10 194 2022-11 5 2022-12 Раньше для выполнения аналогичной операции потребовалось бы привлечение утилит sort и uniq: git log v2.38.0.. —date=’format:%Y-%m’ —format=’%cd’ | sort | uniq -c
- On laienenud „cruft packs“ mehhanismi võimalused, mis on mõeldud saavutatamatute objektide pakendamiseks, millele repot ei osuta viidatud (ei viita harud ega sildid). Saavutatamatud objektid eemaldatakse prügikogujaga, kuid jäävad enne eemaldamist teatud ajaks reposse, et vältida võistlusseisundeid. „Cruft packs“ mehhanism võimaldab hoida kõiki saavutatamatuid objekte ühes pakifailis ning iga objekti muudetud aja andmeid kajastada eraldi tabelis, mis on salvestatud eraldi failis, mille laiendus on „.mtimes“, et need ei kattuks üldise muutmise ajaga.
Saavutatute objektide asukoha aeg repotes enne tegelikku eemaldamist määratakse valiku „—prune=“ abil. Sellega, kuigi eemaldamise viivitamine on tõhus ja praktiline meetod, et vältida repote kahjustamist võistlusseisundi tõttu, ei ole see 100% usaldusväärne. Uues väljaandes on lihtsustatud kahjustatud repote taastamine puuduvate objektide salvestamise võimalus, mille jaoks on käsku „git repack“ lisatud valik „—expire-to“, mis võimaldab määrata faili kõikide kustutatavate objektide välise koopia loomiseks. Näiteks, et salvestada failis backup.git saavutatamatud objektid, mis ei ole viimase 5 minuti jooksul muutunud, võib kasutada käsku: git repack —cruft —cruft-expiration=5.minutes.ago -d —expire-to=../backup.git
- On oluliselt suurenetud (kuni 70%) operatsiooni „git grep —cached“ täitmise kiirus, kui otsitakse alades, kus rakendatakse osalist kloonimist (sparse-checkout) ja millel on osalised indeksid (sparse index). Eelnevalt, kui valikut „—cached“ määrati, toimus esmalt tavalises indeksis otsimine ning seejärel osalistes, mis põhjustas märkimisväärseid viivitusi suuremate repode otsimisel.
- On kiirendatud täitmine serveril uus objekti sidususe kontroll uute objektide reposte paigutamisel „git push“ operatsiooni käigus. Viidates mitte ainult kuulutatud linkide kontrollimisele, võimaldasid optimeerimised vähendada kontrollimise aega 4.5 korda testrepos, kus oli 7 miljonit linki, millest vaid 3% katab push operatsioon.
- Koodis, et kaitsta võimalike täisarvude ületäitumise eest, on käsus „git apply“ piiratud töötlemiseks lubatud patch'id maksimaalne suurus. Kui patch'i suurus ületab 1 GB, kuvatakse nüüd viga.
- Võimalike haavatavuste vältimiseks on tehtud muudatused, et puhastada liigset informatsiooni päistest, mis väljastatakse mooduli h2h3 kasutamisel koos valikutega GIT_TRACE_CURL=1 või GIT_CURL_VERBOSE=1 koos HTTP/2.
- Checkout-protsessi käigus, kui haru on sümboolne link teisele harule, prindib käsk „git symbolic-ref HEAD” nüüd sihtarvu nime, mitte sümboolse lingi nime.
- Lisatud on tugi argumendile @{-1} valikutes „—edit-description” („git branch —edit-description @{-1}”) eelmise haru kirjelduse redigeerimiseks.
- Lisatud käsk „git merge-tree —stdin”, mis võimaldab edastada parameetrite loendi standardse sisendvoo kaudu.
- Võrgufailisüsteemides on vaikimisi välja lülitatud fsmonitor, mis jälgib failisüsteemi muudatusi.
Allikas: opennet.ru
