
Prezentēts izdalīšana izkliedētās avotu koda pārvaldības sistēmas Git 2.55. Starp galvenajām izmaiņām: Rust kompilācijas iekļaušana pēc noklusējuma, fsmonitor procesa realizācija Linux, jauna pakāpes ikmēneša MIDX indeksa pārbūves stratēģija, komanda git history fixup, lai labotu liekšanu, bitu kartes pieejamības optimizācija, paralēla izpildes atbalsts notikumiem, komanda git format-rev. Git kods tiek izplatīts ar GPLv2+ licenci.
Salīdzinot ar iepriekšējo laidienu, jaunajā versijā ir pieņemtas 505 izmaiņas, ko sagatavojuši 100 izstrādātāji, no kuriem 33 pirmo reizi piedalījās Git izstrādē.
Galvenie jaunumi (github.blog, gitlab.com/blog, gitlab.com/git-scm):
- Pa noklusējumu iekļauts atbalsts komponentiem Rust valodā. Kompilators rustc iegūts ir iekļauts būvniecības atkarībās. Rust bez būves var izmantot karogu NO_RUST=1, palaižot make rīku vai -Drust=disabled izpildot meson configure. Iespēja atspējot būvi ar Rust tiks atbalstīta līdz Git 3.0 nodaļai, kurā Rust būs ir iekļauts ir obligāto atkarību sarakstā. Rust valodā ir īstenota slānis, lai nodrošinātu saderību starp konfigurācijām ar SHA-1 un SHA-256 hash, kā arī dažas iekšējas funkcijas, piemēram, mainīgo garuma skaitļu kodēšanas un dekodēšanas. Nākotnē gaidāma lielāka Git iekšējo komponentu pārveidošana uz Rust.
- Eksperimentālā komandā "git history", kas piedāvā iespējas pārrakstīt izmaiņu vēsturi, ir pievienota operācija «git history fixup», lai labotu liekšanu. Fixup operācija ļauj pārvietot izmaiņas, kas pievienotas, izmantojot git add, agrākā liekšanā un automātiski pārrakstīt visas turpmākās liekšanas, līdzīgi kā izpildot komandu git commit —fixup=<commit> un uzsākot git rebase —autosquash <commit>~.
- Linux platformai ir īstenots fona process fsmonitor, kas uzrauga izmaiņas failu sistēmā, izmantojot inotify , un ļauj izvairīties no visas darba katalogu pārbaudes, izpildot tādas komandas kā git status. Aktivizēšana notiek, izmantojot iestatījumu «core.fsmonitor».
- Komandā git repack ir pievienots režīms —write-midx=incremental, kas īsteno jaunu metadatu atjaunināšanas stratēģiju inkrementālajā MIDX indeksā (multi-pack index), ļaujot iztikt bez visa indeksa pārpakošanas. Inkrementālajā multi-pack indeksā, nevis ar vienu lielu indeksu, kas satur informāciju par objektu sadalījumu pa pack failiem, tiek izmantota slāņu dalīšana — katrs slānis aptver noteiktu skaitu pack failu un tiek uzglabāts atsevišķā bitmap failā. Šāda struktūra ļauj pievienot indeksam informāciju par objektiem jaunajos pack failos, pievienojot jaunas slāņus indeksam bez esošo slāņu pārveidošanas. Komanda git repack —write-midx=incremental ļauj pievienot inkrementālajam MIDX indeksam jaunu slāni, kas aptver nesen izveidotos pack failus. Apvienojumā ar repozitoriju pack režīmu —geometric jaunā komanda sniedz iespēju apvienot jaunus objektus no vairākiem pack failiem vienā lielākā pack failā un, ja nepieciešams, veikt pakotnes un blakus slāņu apvienošanu inkrementālajā MIDX indeksā. Šāda stratēģija ļauj izpildot git repack pārrakstīt tikai augšējos slāņus, atstājot vecos lielos slāņus neskartus, kā arī novērst nekontrolētu slāņu ķēdes pieaugumu, saglabājot kopējo slāņu skaitu līmenī, kas proporcionāls kopējo objektu skaita logarithmam.
- Būtiski optimizēta objektu pieejamības bitu kartes ģenerēšana, pateicoties jaunam objektu koku apgaites algoritmam, kas izslēdz nevajadzīgu rekursiju, kešējot objektu pozīcijas, kārtējot bitu kartes pirms to apvienošanas ar XOR operāciju un pārstrādājot kodu bitu kartes pseudosalikumam izveidošanai (pseudo-merge). Testa repozitorijā optimizācijas ļāva samazināt bitu karšu ģenerēšanas laiku no 612 līdz 294 sekundēm.
- Iespējota neatkarīgu hooku konfigurācijas failos. Paralēli nevar darboties ielāpi, kas ietekmē kopējo stāvokli vai ņem vērā, piemēram, grozot komiteju piezīmes vai pārbaudot indeksus un darba koku. Tomēr var paralēli darbināt ielāpus, kas pārbauda linterni un veic vienības testēšanu. Paralēlā izpildei atļautie ielāpi tiek konfigurēti, izmantojot parametru hook.īmenis_ielāps.parallel = true. Tajā pašā laikā izpildāmo darbu skaitu nosaka, izmantojot iestatījumu hook.jobs, hook.<notikums>.jobs vai komandrindas opciju -j.
- Git komandas git pack-objects —path-walk ir ieviesta iespēja norādīt filtrus, piemēram, blob:none, blob:limit=<n>, tree:0, object:type=<tips>, sparse:<oid> un combine:. Veiktajā testā, atmetot blobus, izmantojot —path-walk, izdevās par 16% samazināt izveidotā pack faila lielumu.
- Pievienota komanda git format-rev, lai formatētu revīzijas un objektu nosaukumus, kas minēti komiteju sarakstos vai sastopami gadījuma tekstā (piemēram, to var izmantot ielāpu darbībā, lai apstrādātu komiteju piezīmes).
git last-modified | git format-rev —stdin-mode=text —format=%an
Junio C Hamano builtin/commit.c
- Pašā noklusējumā ir aktivizēta vairuma termināla kontroles secību izvairīšanās informācijas ziņojumos un kļūdu tekstā, ko nosūta servers. Saskaroties ar ļaunprātīgu serveri, šādas escape sekvences varētu tikt izmantotas, lai slēptu vai mainītu izvadi, piemēram, izmantojot escape secības, lai pārvietotu kursoru un notīrītu tekstu. Atstāta atbalsta secības elementi, kas katru elementu izceļ ar krāsu.
- Komanda git checkout -m tagad automātiski saglabā konfliktējošas vietējās izmaiņas stash jomā bez nepieciešamības tūlīt izšķirt konfliktu.
- Git komandā git push pievienota iespēja nosūtīt zaru uz vairākiem ārējiem Git serveriem ar vienu komandu. Piemēram, lai pārsūtītu zaru main ne tikai uz galveno serveri, bet arī uz spoguļiem, var izveidot grupu public no serveriem github, gitlab un mirror:
git config remotes.public "github gitlab mirror"
git push publish main
- Komandai git log —graph pievienota opcija —graph-lane-limit=<N>, lai ierobežotu vertikālo joslu skaitu, vizualizējot zarus, ļaujot atstāt vietu ekrānā datiem par komitejām repozitorijos ar lielu zaru skaitu.
…
* | | | | 619931f561 Apvienojiet zarus ‘dl/posix-unused-warning-clang’
|\ \ \ \ \
| * | | | ~ cf48887610 compat/posix.h: vienkāršo GIT_GNUC_PREREQ() salīdzinājumu
| * | | | ~ ffd45926dc compat/posix.h: sakārto GIT_GNUC_PREREQ() un UNUSED
|\ \ \ \ \~
| * | | | ~ 3f5203eeb4 ls-files: filtrē ceļa specifikāciju pirms lstat
- Komandām git log un git rev-list pievienota opcija —max-count-oldest=<N>, kas ļauj izvēlēties N vecākos komitejus diapazonā.
Avots: linux.org.ru
