Vydání systému pro správu verzí Git 2.52

Po třech měsících vývoje byl představen release distribuovaného systému správy verzí Git 2.52. Git se vyznačuje vysokým výkonem a poskytuje prostředky pro nelineární vývoj, založené na větvení a sloučení větví. Pro zajištění integrity historie a odolnosti vůči změnám „zpětně“ se používá implicitní hashování celé předchozí historie v každém commitu, stejně jako ověřování digitálními podpisy vývojářů jednotlivých tagů a commitů. Kód Git je šířen pod licencí GPLv2+.

Ve srovnání s předchozím vydáním byla do nové verze zařazena 637 změn, přičemž se na nich podílelo 94 vývojářů (33 z nich poprvé). Hlavní novinky (1, 2, 3):

  • Byl přidán příkaz „git last-modified“ pro zobrazení seznamu souborů v dané revizi a commitů, kterými byly provedeny poslední změny v každém z těchto souborů. $ git last-modified HEAD b56f6dcd7b4c90192018e848d0810f091d092913 test.h 29330ae4b820147c98e723399e9438c8bee60a8a test1.c 573ad8917beb99dc643b6e7f5c117a294384a575 test2.c
  • Byl přidán příkaz „git repo“ pro provádění akcí spojených s vyhledáváním informací z repozitáře. Byly navrženy dvě podpříkazy — „git repo info“ a „git repo structure“, které zobrazují informace o nastavení repozitáře a údaje o struktuře repozitáře (například je možné zjistit počet referencí a objektů v repozitáři). $ git repo info object.format references.format object.format=sha1 references.format=reftable $ git repo structure | Struktura repozitáře | Hodnota | | ——————— | —— | | * Reference | | | * Počet | 1983 | | * Větve | 4 | | * Tagy | 1125 | | * Vzdálené repozitáře | 854 | | * Ostatní | 0 | | | | * Dostupné objekty | | | * Počet | 518955 | | * Commity | 77469 | | * Stromy | 188865 | | * Bloby | 251631 | | * Tagy | 990 |
  • Do příkazu „git refs“ byly přidány tři podpříkazy, které unifikují roztržité a překrývající se nízkoúrovňové operace se referencemi (git for-each-ref, git show-ref, git update-ref a git pack-refs):
    • „git refs optimize“ — optimalizace backendu pro ukládání referencí (analogicky k „git pack-refs“).
    • „git refs list“ — výpis seznamu všech referencí (analogicky k „git for-each-ref“ nebo „git show-ref“).
    • „git refs exists“ — kontrola existence reference (analog „git show-ref —exists“).
  • Formát pro export nebo import historie commitů byl rozšířen o možnost práce s kryptografickými podpisy, které používají jak identifikátory objektů založené na algoritmu SHA-1, tak na základě SHA-256. V příkazu „git fast-import“ byla implementována podpora pro zpracování podepsaných tagů na základě podobného principu jako podepsané commity. Byly přidány možnosti „—signed-commits=<režim>“ a „—signed-tags=<režim>“ pro řízení zpracování podepsaných commitů a tagů během importu (režim může nabývat hodnot verbatim, warn-verbatim, warn-stri, strip nebo abort).
  • Do příkazu „git maintenance“ byla přidána podpora nové strategie „geometric“ („git config set maintenance.strategy geometric“), která umožňuje zkrátit dobu údržby velkých monorepozitářů. Ve srovnání s dříve dostupnou strategií, která využívá logiku jako v příkazu „git gc“, nová strategie se vyhýbá opakované obnově všech objektů a vylučuje příliš náročné operace, jako je slučování všech pack souborů (pokud je to možné, sloučení se provádí po částech a bez úklidu odstraněných objektů).
  • Byl přidán příkaz „git sparse-checkout clean“ pro zjednodušení obnovení stavu pracovního adresáře tím, že odstraní soubory, které neodpovídají novému definování sparse-checkout a neměly by být přítomny v lokální kopii podle aktuálních parametrů sparse-checkout.
  • Aby se odstranily komplikace z kódu a zjednodušilo údržbu, byl proveden refaktoring za účelem snížení použití globální proměnné the_repository.
  • Bylo rozšířeno použití Bloom filtrů, pravděpodobnostní struktury pro kontrolu příslušnosti do množiny, která umožňuje falešné určení chybějícího prvku, ale vylučuje přeskočení existujícího prvku. Bloom filtry jsou nyní používány pro urychlení vyhledávání v historii změn při specifikaci masek v cestách k souborům, například „foo/bar/*/baz“.
  • Výkon příkazu „git describe“ byl zvýšen o 30 %, díky použití prioritní fronty. V „git remote rename“ byla zrychlena operace přejmenování odkazů. V „git ls-files“ bylo rozšířeno použití indexů. Práce příkazu „git log -L“ byla znatelně zrychlena díky vyloučení nadbytečných třístupňových porovnání při zpracování slučování commitů. Byly provedeny optimalizace v knihovně xdiff.
  • Byla zavedena volitelná možnost použití implementací v jazyce Rust pro některé vnitřní funkce, jako je kódování a dekódování celočíselných hodnot proměnné délky. Výchozí kód v Rustu se nepoužívá a pro jeho zapnutí je třeba uvést přepínač sestavení WITH_RUST. V budoucnu se očekává přepracování významnějších vnitřních komponent Git v Rustu a zařazení Rustu mezi povinné závislosti pro sestavení v Git 3.0.
  • Byl aktualizován seznam změn narušujících kompatibilitu, které budou aplikovány v větvi Git 3.0. V Git 3.0 se rozhodlo změnit výchozí hodnotu nastavení init.defaultBranch na "main", tedy v repozitářích vytvořených příkazem "git init" bude výchozí větev pojmenována "main", nikoliv "master". Dále se oznamuje přechod na identifikátory objektů založené na algoritmu SHA-256 při inicializaci nových repozitářů. Pro zjednodušení portability mezi repozitáři s identifikátory objektů založenými na hashe SHA-1 a SHA-256 je k dispozici možnost provádět operace push a pull z repozitáře s jedním algoritmem hashování do repozitáře, který využívá jiný algoritmus hashování.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster