Git 2.55

Predstavené vydanie distribuovaného systému správy zdrojových textov Git 2.55. Medzi kľúčové zmeny patrí: predvolené zahrnutie zostavenia s Rustom, implementácia pre Linux procesu fsmonitor, nová stratégia prebalenia inkrementálneho MIDX-indexu, príkaz git history fixup na opravu commitu, optimalizácia generovania bitových máp dostupnosti objektov, podpora paralelného vykonávania hookov, príkaz git format-rev. Kód Git distribuovaný pod licenciou GPLv2+.

V porovnaní s predchádzajúcim vydaním bola do novej verzie prijatá 505 zmien, na ktorých pracovalo 100 vývojárov, z ktorých 33 sa zúčastnilo vývoja Git po prvýkrát.

Hlavné novinky (github.blog, gitlab.com/blog, gitlab.com/git-scm):

  • Predvolene je zahrnutá podpora komponentov v jazyku Rust. Miešač rustc bol pridaný v zozname závislostí na zostavenie. Na zostavenie bez Rustu môžete použiť príznak NO_RUST=1 pri spustení nástroja make alebo -Drust=disabled pri vykonávaní meson configure. Možnosť vypnutia zostavenia s Rustom bude naďalej podporovaná do vetvy Git 3.0, v ktorej bude Rust je zapnutý v počte povinných závislostí. V jazyku Rust bola implementovaná vrstva na prenosnosť medzi konfiguráciami s hashmi SHA-1 a SHA-256, ako aj niektoré vnútorné funkcie, ako je kódovanie a dekódovanie celočíselných hodnôt premennej dĺžky. V budúcnosti je očakávaná prepracovanie na Rust viac významných vnútorných komponentov Git.
  • Do experimentálneho príkazu "git history", poskytujúceho možnosti na prepisovanie histórie zmien, bola pridaná operácia «git history fixup» na opravu commitu. Operácia fixup umožňuje preniesť zmeny pridané prostredníctvom git add do staršieho commitu a automaticky prepísať všetky nasledujúce commity podobne ako pri vykonávaní príkazu git commit —fixup=<commit> a spustení git rebase —autosquash <commit>~.
  • Pre platformu Linux bol implementovaný na pozadí proces fsmonitor, ktorý sleduje zmeny v súborovom systéme pomocou mechanizmu inotify a umožňuje vyhnúť sa prehľadávaniu celého pracovného adresára pri vykonávaní príkazov ako git status. Aktivácia sa uskutočňuje prostredníctvom nastavenia „core.fsmonitor».
  • Do tímu git repack bol pridaný režim —write-midx=incremental, ktorý implementuje novú stratégiu aktualizácie metadát v inkrementálnom MIDX indexe (multi-pack index), umožňujúcu obísť prebalenie celého indexu. V inkrementálnom viacbalíkovom indexe sa namiesto jedného veľkého indexu, ktorý obsahuje informácie o distribúcii objektov podľa pack-súborov, používa rozdelenie na vrstvy — každá vrstva pokrýva určité množstvo pack-súborov a je uložená v samostatnom bitmap súbore. Takáto štruktúra umožňuje pridávať do indexu dáta o objektoch v nových pack-súboroch, pričom sa k indexu prikladajú nové vrstvy bez prebudovania existujúcich vrstiev. Príkaz git repack —write-midx=incremental umožňuje pridať do inkrementálneho MIDX indexu novú vrstvu, pokrývajúcu nedávno vytvorené pack-súbory. V kombinácii s režimom balenia repozitárov —geometric nový príkaz umožňuje zlúčiť nové objekty z viacerých pack-súborov do jedného väčšieho pack-súboru a v prípade potreby vykonať balenie a zlúčenie viacerých susedných vrstiev inkrementálneho MIDX indexu. Takáto stratégia umožňuje pri vykonávaní git repack prepísať iba horné vrstvy, pričom staré veľké vrstvy zostávajú nedotknuté, a tiež zabráni nekontrolovateľnému narastaniu reťazca vrstiev, pričom si zachováva celkový počet vrstiev na úrovni proporcionálnej logaritmu z celkového počtu objektov.
  • Výrazne bola optimalizovaná generácia bitmap prístupnosti objektov pomocou nového algoritmu prechodu cez strom objektov, ktorý vylučuje zbytočnú rekurziu, cacheovanie pozícií objektov, triedenie bitmap pred ich zlúčením operáciou XOR a prerábku kódu na vytvorenie bitmap pseudo-merge (pseudo-merge). V testovacom repozitári optimalizácie umožnili skrátiť čas generovania bitmap z 612 na 294 sekúnd.
  • Bola implementovaná možnosť paralelného vykonávania nezávislých hookov vo konfiguračných súboroch. Súčasne sa nemôžu spúšťať háky, ktoré ovplyvňujú spoločný stav alebo ho zohľadňujú, napríklad meniace poznámky k commitom alebo kontrolujúce indexy a pracovné stromy. Avšak je možné paralelne spúšťať háky na kontrolu linters a vykonávanie unit testovania. Háky, ktoré umožňujú paralelné vykonávanie, sa nastavujú pomocou parametra hook.názov_háku.parallel = true. Počet súčasne spúšťaných úloh je určený nastavením hook.jobs, hook.<udalosť>.jobs alebo voľbou príkazového riadka -j.
  • V tíme git pack-objects —path-walk je implementovaná možnosť zadávania filtrov, ako blob:none, blob:limit=<n>, tree:0, object:type=<typ>, sparse:<oid> a combine:. V vykonanom teste vylúčenie blobov pri vykonávaní —path-walk umožnilo o 16% znížiť veľkosť vytvoreného pack súboru.
  • Pridaný príkaz git format-rev na formátovanie revízií a názvov objektov, ktoré sú spomenuté v zoznamoch commitov alebo sa vyskytujú v ľubovoľnom texte (napríklad sa dajú použiť v hákoch na spracovanie poznámok k commitom).

git last-modified | git format-rev —stdin-mode=text —format=%an

Junio C Hamano builtin/commit.c

  • Predvolene je zapnuté únik väčšiny sekvencií ovládania terminálu v informačných správach a textoch chýb, ktoré prenáša server. Pri pokuse o prístup k škodlivému serveru mohli takéto escape sekvencie byť použité na skrytie alebo modifikáciu výstupu, napríklad cez escape sekvencie na presun kurzora a vyčistenie textu. Zachovaná je podpora escape sekvencií na zvýraznenie prvkov farbou.
  • Príkaz git checkout -m teraz automaticky ukladá konfliktujúce miestne zmeny do stash oblasti bez potreby okamžitého riešenia konfliktu.
  • Do príkazu git push bola pridaná možnosť umiestniť vetvu na niekoľko vonkajších Git serverov jedným príkazom. Napríklad pre prenos vetvy main nielen na hlavný server, ale aj na zrkadlá môžeme vytvoriť skupinu publish zo serverov github, gitlab a mirror:

git config remotes.publish "github gitlab mirror"
git push publish main

  • Do príkazu git log —graph bola pridaná možnosť —graph-lane-limit=<N> na obmedzenie počtu vertikálnych pruhov pri vizualizácii vetiev, čo umožňuje nechať miesto na obrazovke pre údaje o commitoch v repozitároch s veľkým počtom vetiev.

…
* | | | | 619931f561 Merge branch ‘dl/posix-unused-warning-clang’
|\ \ \ \ \
| * | | | ~ cf48887610 compat/posix.h: zjednodušiť porovnanie GIT_GNUC_PREREQ()
| * | | | ~ ffd45926dc compat/posix.h: upratať GIT_GNUC_PREREQ() a UNUSED
|\ \ \ \ \~
| * | | | ~ 3f5203eeb4 ls-files: filtrovať pathspec pred lstat

  • Do príkazov git log a git rev-list bola pridaná voľba —max-count-oldest=, ktorá umožňuje vybrať N najstarších commitov v intervale.

Zdroj: linux.org.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster