Ir paziņots par izplatīto avotu kontroles sistēmas Git 2.37 izlaišanu. Git ir viena no populārākajām, uzticamākajām un augstas veiktspējas versiju kontroles sistēmām, kas nodrošina elastīgus nelineārus izstrādes rīkus, kuru pamatā ir sazarošana un apvienošana. Lai nodrošinātu vēstures integritāti un noturību pret retroaktīvām izmaiņām, katrā saistībā tiek izmantota visas iepriekšējās vēstures netieša jaukšana, kā arī ir iespējams sertificēt atsevišķus tagus un saistības ar izstrādātāju digitālajiem parakstiem.
Salīdzinot ar iepriekšējo versiju, jaunajā versijā tika pieņemtas 395 izmaiņas, kas sagatavotas, piedaloties 75 izstrādātājiem, no kurām 20 izstrādē piedalījās pirmo reizi. Galvenie jauninājumi:
- Daļējo indeksu mehānisms (retais indekss), kas aptver tikai daļu no repozitorija, ir sagatavots plašai lietošanai. Daļēji indeksi var uzlabot veiktspēju un ietaupīt vietu krātuvēs, kas veic daļējas klonēšanas (retās pārbaudes) darbības vai strādā ar nepabeigtu repozitorija kopiju. Jaunais laidiens pabeidz daļēju indeksu integrāciju git show, git sparse-checkout un git stash komandās. Visievērojamākais veiktspējas ieguvums no daļēju indeksu izmantošanas ir redzams ar komandu git stash, kuras izpildes ātrums dažās situācijās ir palielinājies par 80%.
- Ir ieviests jauns “kruft pakotņu” mehānisms, lai iesaiņotu nesasniedzamus objektus, uz kuriem nav atsauces repozitorijā (nav norādīti zari vai tagi). Nesasniedzamos objektus atkritumu savācējs izdzēš, bet tie paliek krātuvē noteiktu laiku, pirms tie tiek izdzēsti, lai izvairītos no sacensību apstākļiem. Lai izsekotu nesasniedzamu objektu rašanās periodu, tiem nepieciešams pievienot tagus ar līdzīgu objektu maiņas laiku, kas neļauj tos uzglabāt vienā pakotnes failā, kurā visiem objektiem ir kopīgs maiņas laiks. Iepriekš katra objekta saglabāšana atsevišķā failā radīja problēmas, jo bija liels skaits jaunu, nesasniedzamu objektu, kas vēl nebija piemēroti dzēšanai. Piedāvātais “kruftpaku” mehānisms ļauj glabāt visus nesasniedzamos objektus vienā pakotnes failā un atspoguļot datus par katra objekta modifikācijas laiku atsevišķā tabulā, kas glabājas failā ar paplašinājumu “.mtimes”.
- Operētājsistēmām Windows un macOS ir iebūvēts mehānisms failu sistēmas izmaiņu izsekošanai, kas ļauj izvairīties no iterācijas visā darba direktorijā, veicot tādas darbības kā “git statuss”. Iepriekš, lai izsekotu izmaiņām, ārējās utilītas FS izmaiņu izsekošanai, piemēram, Watchman, varēja pieslēgt, izmantojot āķus, taču tas prasīja papildu programmu instalēšanu un konfigurāciju. Tagad norādītā funkcionalitāte ir iebūvēta, un to var iespējot ar komandu “git config core.fsmonitor true”.
- Komandā “git sparse-checkout” par novecojušu ir pasludināts atbalsts režīmam “—cone”, veidņu definēšanas metodei daļējai klonēšanai, kas ļauj, nosakot repozitorija daļu, uz kuru attiecas klonēšanas operācija, lai uzskaitītu atsevišķus failus, izmantojot “.gitignore” sintaksi, kas neļauj izmantot daļējo indeksu optimizācijai.
- Palielināta elastība, konfigurējot fsync() izsaukumu, lai izskalotu izmaiņas diskā. Parametram “core.fsyncMethod” ir pievienots atbalsts “pakešu” sinhronizācijas stratēģijai, kas ļauj paātrināt darbu, rakstot lielu skaitu atsevišķu failu, uzkrājot izmaiņas atpakaļrakstīšanas kešatmiņā, ko atiestata viens fsync() zvanu. Pārbaude, kuras rezultātā tika pievienoti 500 faili, izmantojot komandu “git add”, tika pabeigts 0.15 sekundēs, kad tika iespējots jaunais režīms, savukārt fsync() izsaukšana katram failam prasīja 1.88 sekundes, bet, neizmantojot fsync, — 0.06 sekundes.
- Filiāles šķērsošanas komandām, piemēram, “git log” un “git rev-list”, tagad ir opcija “-since-as-filter=X”, kas ļauj filtrēt informāciju par saistībām, kas ir vecākas par “X”. Atšķirībā no opcijas “— kopš” jaunā komanda tiek ieviesta kā filtrs, kas neaptur meklēšanu pēc pirmās aktivizēšanas, kas ir vecāka par norādīto laiku.
- Komandā “git remote”, norādot karogu “-v”, tiek parādīta informācija par daļējiem repozitorija kloniem.
- Pievienots iestatījums "transfer.credentialsInUrl", kas var iegūt vērtības "warn", "die" un "allow". Ja norādīts parametrā “remote. .url vienkāršā teksta akreditācijas dati, mēģinājums veikt "ienes" vai "push" darbību neizdosies ar kļūdu, ja "transfer.credentialsInUrl" iestatījums ir iestatīts uz "die" vai brīdinājums, ja iestatīts uz "brīdināt".
- Pēc noklusējuma ir iespējota jaunā komandas “git add -i” interaktīvā režīma ieviešana, kas pārrakstīta no Perl uz C.
Avots: opennet.ru
