Predstavené vydanie distribuovaného systému správy zdrojových textov Git 2.54. Git sa vyznačuje vysokou výkonnosťou a poskytuje prostriedky pre nelineárny vývoj, založené na vetvení a zlúčení vetiev. Na zabezpečenie integrity histórie a odolnosti voči zmenám „spätnou” implementáciou sa používa implicitné hashovanie celej predchádzajúcej histórie v každom commite, ako aj overenie digitálnymi podpismi vývojárov jednotlivých tagov a commitov. Kód Git distribuovaný pod licenciou GPLv2+.
V porovnaní s predchádzajúcou verziou bola do novej verzie zahrnutá 770 zmien, pripravených s účasťou 137 vývojárov (66 z nich sa zúčastnilo vývoja Git po prvýkrát).
-
Bola implementovaná príkaz „git history“, ktorý poskytuje experimentálne možnosti na prepísanie histórie zmien, ktoré sú jednoduchšie a bezpečnejšie na používanie než zasažovanie do commitov príkazom git rebase. Poskytujú sa dve operácie:
- git history reword na prepísanie správy v určenom commite bez zmeny pracovného priestoru a indexu (okrem poznámky, ostatné zostáva nedotknuté). Napríklad, na opravu preklepu.
- git history split na interaktívne rozdelenie určeného commitu na dva rôzne commity s presunutím vybraných častí z pôvodného commitu do dodatočného commitu.
V budúcich vydaniach sa očakáva pridanie ďalších príkazov: git history fixup na opravu commitu, git history drop na odstránenie commitu, git history reorder na zmenu poradia sledovania commitov a git history squash na zlúčenie commitov.
-
Bola implementovaná nová metóda definovania spracovateľov (hook) v konfiguračných súboroch. Namiesto umiestňovania skriptov so spracovateľmi do adresára .git/hooks v každom repozitári môžu byť príkazy na vyvolanie spracovateľov teraz určované priamo v konfiguračných súboroch. Nastavenia môžu byť viazané na repozitár alebo uvedené v konfiguračných súboroch, ktoré platia pre všetky repozitáre (/etc/gitconfig) alebo repozitáre používateľa (~/.gitconfig). Je možné viazať niekoľko spracovateľov k jednému podujatiu. Skripty z .git/hooks môžu stále pokračovať vo vyvolávaní, ale spúšťajú sa po spracovateľoch z konfiguračných súborov. Na zobrazenie zoznamu spracovateľov by sa mala použiť príkaz git hook list a na selektívne vypnutie vyvolávania spracovateľov – nastavenie hook..enabled = false:
[hook "linter"] event = pre-commit command = ~\/bin\/linter —cpp20 [hook "no-leaks"] event = pre-commit command = ~\/bin\/leak-detector $ git hook list pre-commit global linter ~\/bin\/linter —cpp20 local no-leaks ~\/bin\/leak-detector
- V tíme „git maintenance“ je predvolenej stratégie geometric (git config set maintenance.strategy geometric), ktorá umožňuje skrátiť čas údržby veľkých monorepo. V porovnaní s predtým použitou stratégiou, ktorá využívala logiku ako príkaz git gc, nová stratégia sa vyhýba prebaleniu všetkých objektov a vylučuje nadmerne náročné operácie, ako je zlučovanie všetkých pack súborov (ak je to možné, zlučovanie sa vykonáva po častiach a bez čistenia odstránených objektov).
- Databáza objektov (ODB) a s ňou súvisiace API boli prevedené na novú architektúru založenú na použití pripojiteľných backendov. Realizovaná reštrukturalizácia abstraktizuje formát ukladania objektov a v budúcnosti umožní realizovať také možnosti, ako sú alternatívne backendy a formáty objektov, napríklad pre efektívnejšie ukladanie veľkých binárnych súborov alebo na optimalizáciu práce veľkých git hostingov.
- V tíme „git repo structure“, ktorá poskytuje informácie o štruktúre repozitára, zabezpečuje zobrazenie nielen celkovej veľkosti, ale aj zobrazenie najväčších objektov každého typu, čím sa umožní hodnotenie veľkosti bez použitia externého nástroja git-sizer.
$ git repo structure … | * Najväčšie objekty | | | * Commits | | | * Maximálna veľkosť [1] | 17.23 KiB | | * Maximálny počet rodičov [2] | 10 | | * Trees | | | * Maximálna veľkosť [3] | 58.85 KiB | | * Maximálny počet položiek [4] | 1.18 k | | * Blobs | | | * Maximálna veľkosť [5] | 1019.51 KiB | | * Tagy | | | * Maximálna veľkosť [6] | 7.13 KiB |
- V tíme „git replay“, ktorá sa používa namiesto git rebase na rekonstrukciu histórie na serveri bez pracovného adresára, zahrnuté predvolené atómové aktualizovanie referencií (namiesto výstupu zoznamu príkazov update-ref na ručné vykonanie), implementovaná voľba —revert na zrušenie zmien od série commitov, zabezpečené vynechanie výsledných prázdnych commitov a objavila sa možnosť rekonštrukcie histórie až po koreňový commit.
- V „git rev-list“ a podobné príkazy bola pridaná voľba —maximal-only na zobrazenie len commitov, ktoré nie sú dosiahnuteľné inými commitmi.
- Do príkazu „git repo info“ bola pridaná voľba —keys na výstup zoznamu všetkých známych kľúčov.
- V tíme „git add -p» Pri navigácii medzi blokmi kódu pomocou klávesov „J“ a „K“ je zabezpečená označenie už schválených a preskočených blokov. Pridaná možnosť —no-auto-advance na vypnutie automatického prechodu na ďalší súbor, aby ste sa mohli vrátiť k predchádzajúcim súborom pred commitom.
- Prebehla optimalizácia webového rozhrania „gitweb“ pre prácu s mobilných zariadení.
- V tíme „git apply –directory» pred použitím je zabezpečená normalizácia súborových ciest, ako napríklad .\/un\/..\/normalized\/path.
- Dokumentovaná možnosť pridania vlastných podpríkazov prostredníctvom umiestnenia súborov git-<cmd> v adresári s vykonávacími súbormi.
- Do príkazu „git send-email» pridaná podpora klientských certifikátov.
- Pre príkaz „git status“ je implementovaná konfigurácia status.compareBranches, prostredníctvom ktorej môžete uviesť vetvy, s ktorými sa bude vykonávať porovnanie aktuálnej vetvy:
[status] compareBranches = @{upstream} @{push}
- V „git rebase» pridaná možnosť —trailer na zjednodušenie pridávania metadát ku všetkým commitom:
git rebase —trailer "Reviewed-by: Test <test@example.com>"`
- Do príkazu „git fast-import» pridaná možnosť nahradenia podpisov pre commity, ktoré sa stali neplatnými po importe.
- Pridaná podpora balenia (compaction) viacbalíkových indexov MIDX (multi-pack index), pri ktorých sa medzi sebou spájajú drobné vrstvy MIDX-indexu s informáciami o dostupnosti objektov a súvisiace bitmapové súbory, čo umožňuje znížiť počet nahromadených vrstiev v starších repozitároch.
- V príkaze git backfill je implementovaná možnosť určiť revízie (rozsahy commitov) a masky ciest (pathspec) na obmedzenie načítaných častí histórie zmien:
git backfill main~100..main git backfill — ‘*.c’
- Pridané alternatívne formy volania príkazu git config list – git config -l a git config —list.
- Povolené používanie ne-ASCII znakov v menách aliasov príkazov zadaných v konfiguračnom súbore:
[alias "získať"] command = fetch
- Zmenilo sa zobrazovanie podpisov, ktorým vypršala platnosť GPG-kľúčov, ale ktoré boli platné v čase podpisovania commitu. Takéto podpisy sa teraz zobrazujú ako platné s poznámkou o zastaraní kľúča (skôr boli zvýrazňované červenou farbou, čo vytváralo dojem ich neplatnosti).
- Pri prístupe k repozitárom cez HTTP je zabezpečené spracovanie chyby s kódom 429 (Too Many Requests). Požiadavky, ktoré skončili s touto chybou, sa teraz považujú nie za fatálny problém, ale za dočasnú chybu, pre ktorú by sa operácia mala po chvíli zopakovať. oneskorenie pred opakovaním je nastavené pomocou možnosti http.retryAfter, počet opakovaní – http.maxRetries, čas čakania – http.maxRetryTime.
Zdroj: linux.org.ru
