Tika izlaista sadalītā izveidošanas rīka Git 2.56 versija. Git kods tiek izplatīts saskaņā ar GPLv2+ licenci. Salīdzinājumā ar iepriekšējo izlaidumu, jaunajā versijā iekļauti 748 izmaiņas, ko sagatavojuši 104 izstrādātāji, no kuriem 39 piedalījās Git izstrādē pirmo reizi. Galvenās jaunās funkcijas (1, 2, 3):
- Pievienots režīms «git add —resolved», lai atrisinātu konfliktus, apvienojot zarus, kas pārbauda failus uz konfliktu marķieriem un, ja vismaz vienā failā tiek konstatēts marķieris, izsniedz kļūdu, neiekļauj nevienu no failiem un parāda failu sarakstu, kuriem nepieciešams labojums. Atšķirībā no komandas «git add —update», jaunajā režīmā tiek apstrādāti tikai faili, kas atrodas konflikta stāvoklī, un ar konfliktu nesaistītās izmaiņas tiek ignorētas, kas ļauj droši pabeigt zarus apvienošanas procesu, pat ja darba katalogā ir citas nebeigtas izmaiņas (komanda «git add —update» pievienoja indeksā visus iepriekš uzraudzītos mainītos failus darba katalogā).
- Ievērojami paātrināta darbība ar lieliem repozitorijiem, optimizējot pēdējo kopīgo apņemšanās meklēšanas algoritmu apvienojot zarus un salīdzinot apņemšanās. Darbības laikā tagad tiek ņemtas vērā apņemšanās, kas pieder tikai vienam no zariem, ļaujot pārtraukt skenēšanu tūlīt pēc visiem iespējamajiem kopīgajiem priekštečiem, netērējot laiku tālākai izmaiņu vēstures pārbaudei. Viens no testētajiem repozitorijiem bija par 20 reizēm ātrāks, bet otrs - par 70 reizēm ātrāks. Izpildot komandu «git merge-base —all v4.8 v4.9» repozitorijā ar Linux kodolu, soļu skaits samazinājās no 167 tūkstošiem līdz 3.8 tūkstošiem.
- Servera lietošanai pielāgotā pārpakotā režīmā «—path-walk» ir iespējams izveidot kompaktākus pack failus, grupējot objektus pēc to ceļa katalogu kokā (piemēram, izmantojot «—path-walk» Fluent UI repozitorijā, izdevās samazināt pack faila izmēru no 558 MB līdz 164 MB). Jaunajā versijā ir ieviesta iespēja izmantot «—path-walk» režīmu kopā ar sasniegtības bitkarti (reachability bitmap) un deltas salām (delta island), ko izmanto git hostinga pakalpojumi, lai paātrinātu darbību un izolētu fork’us no galvenā repozitorija.
- Novērstas šaurās vietas, kas izraisīja liekas aprēķins lielos repozitorijos: izņemtas liekas failu stāvokļa pārbaudes rakstīšanas laikā reftable; izslēgta atkārtota saraksta skenēšana katras jaunas pack faila ievietošanas laikā; paātrinātas darbības ar reftable, kurā ir uzkrāts daudz ierakstu par dzēšanu; optimizēta «git diff» darbība, norādot ierobežojumus pēc failu ceļiem. Pēc optimizācijas reftable darbība ar lielu izdzēšanu ir paātrinājusies 65 reizes (no 13 sekundēm līdz 0,2 sekundēm), savukārt problemātiskās komandas «git diff» izpilde repozitorijā Chromium ar 500000 elementiem indeksā tagad aizņem 0,07 sekundes vietā 8 minūtes.
- Eksperimentālajā komandā «git history», kas sniedz iespējas pārrakstīt izmaiņu vēsturi, pievienota operācija «git history drop», lai dzēstu izvēlēto kommitu un automātiski pievienotu tā pēcnācējus vecākajam kommitam.
- Pievienota komanda «git branch —delete-merged ‘origin/*’ ‘topic-*'», lai droši izdzēstu grupas lokālo zaru, kuru izmaiņas jau ir nodotas ārējam repozitorijam. Filtrējot zarus un repozitorijus, ir atļauts izmantot maskas. Lai analizētu kandidātus dzēšanai bez faktiskas operācijas izpildes, var izmantot flagu «—dry-run».
- Pievienota komanda «git refs create|update|delete|rename», kurā apvienotas zema līmeņa operācijas, lai izveidotu, dzēstu, pārdēvētu un atjauninātu atsauces.
- Komandai «git bisect run» pievienota opcija «—reset-when-found=[]», kas automātiski atgriež repozitoriju stāvoklī pirms meklēšanas uzsākšanas vai atstāj aktīvo problemātisko kommitu, bez nepieciešamības atsevišķi palaist komandu «git bisect reset».
- Komandai «git replay» pievienots karogs «—linearize», lai izmantotu plakanā apvienošanas topoloģiju, līdzīgi kā «git rebase —no-rebase-merges», bet bez piekļuves darba koku.
- Komandā «git log —follow» ieviesta failu pārdēvēšanas izsekošana nelineārā izmaiņu vēsturē, piemēram, apvienojot zarus. Faila ceļš tagad tiek fiksēts atsevišķi katram vecāku kommitam, padarot rezultātu neatkarīgu no kommitu vēstures kārtības.
- Pievienota iespēja izmantot komandu «git repack -a —filter=blob:limit=1m —drop-filtered» lielu blob objektu, kas ir ielādēti pēc pieprasījuma no ārējā repozitorija un netiek izmantoti pašreizējā indeksā, dzēšanai. Ja vēlāk tiek piekļūts šiem objektiem, tie tiks automātiski pārlādēti.
- Komandā «git log —graph» grafos ar vairākiem neatkarīgiem saknēm ieviesta atkāpe, lai skaidri atdalītu nesavienotos kommitus.
- Tika nodrošināta tipisku drukas kļūdu atklāšana, piemēram, «git push origin/main» vietā «git push origin main» vai «git branch —set-upstream-to origin main» vietā «git branch —set-upstream-to=origin/main», un sniedzot ieteikumu par pareizu variantu.
Avots: opennet.lv
