Po třech měsících vývoje byl zveřejněn vydání distribuovaného systému správy verzí Git 2.43. Git je jedním z nejpopulárnějších, spolehlivých a vysoce výkonných systémů správy verzí, který poskytuje flexibilní nástroje pro nelineární vývoj založené na odvětvení a slučování 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, také je možné ověření digitálními podpisy jednotlivých tagů a commitů od vývojářů.
Ve srovnání s minulým vydáním byla v nové verzi přijata 464 změna, která byla připravena za účasti 80 vývojářů, z nichž 17 se zúčastnilo vývoje poprvé. Hlavní novinky:
- Do příkazu „git repack“ byly přidány možnosti „—filter“ a „—filter-to“, které umožňují provést znovupaketování repozitáře podle zadaného filtru objektů, a při potřebě přesunout na jiné místo objekty, které nevyhovují danému filtr. Tyto možnosti lze využít k rozdělení repozitáře podle určitých kritérií (například k odstranění nepotřebných nebo příliš velkých objektů), přičemž se zachovává možnost přístupu ke všem částem prostřednictvím částečného klonování. Například pro ponechání blobů v repozitáři o velikosti menší než 1 MB a přesun zbylých velkých objektů do samostatného repozitáře je možné provést: $ git init —bare ../backup.git $ git repack -ad —filter='blob:limit=1m' \ —filter-to=../backup.git/objects/pack/pack
Inicializace repozitáře pomocí částečného klonování umožňuje pracovat s neúplnou kopií repozitáře a správně zpracovávat přístupy k chybějícím objektům (při pokusu o přístup k chybějícím objektům budou tyto objekty za běhu načítány podle potřeby).
- Byla přidána funkce pro práci s více pack soubory obsahujícími informace o nedosažitelných objektech („cruft packs“), na které v repozitáři neexistují odkazy (nevztahují se na ně větve nebo tagy). Pomocí nové možnosti „git repack —max-cruft-size“ lze určit maximální velikost jednotlivého pack souboru a dosáhnout rozdělení databáze nedosažitelných objektů na sérii malých pack souborů. Použití několika menších pack souborů místo jednoho velkého výrazně zkracuje I/O operace během repackování repozitářů s velkým počtem nedosažitelných objektů, protože pro každou repackovací operaci není nutné přepisovat všechna data.
- Byla přidána detekce pokusů o provedení dvojitého vrácení commitu pomocí „git revert“ a tento fakt se zohledňuje při vytváření zprávy o vrácení (při opakovaném „git revert“ místo „Revert: Revert: fix bug“ bude zapsáno „Reapply fix bug“, a pokud se změní podruhé — „Revert Reapply fix bug“). $ git revert —no-edit HEAD >/dev/null $ git revert —no-edit HEAD >/dev/null $ git log —oneline a300922 (HEAD -> main) Reapply „fix bug“ 0050730 Revert „fix bug“ b290810 fix bug
- Bylo povoleno současné používání voleb „—rfc“ a „—subject-prefix“. Například pro vytvoření zprávy s prefixem „[RFC PATCH bpf-next]“ v předmětu zprávy lze uvést: $ git format-patch —subject-prefix="PATCH bpf-next" —rfc
- V příkazu „git log“ bylo povoleno použití zástupce „%(decorate)“ pro zobrazení názvů souvisejících větví při určení formátu pomocí volby „—format“, například: $ git log —format=’%cr%(decorate) (%h) %s’ před 3 dny (HEAD -> master, origin/master, origin/HEAD) (e0939bec27) RelNotes: drobné úpravy formulací v poznámkách ke vydání 2.43.0 před 7 dny (tag: v2.43.0-rc1) (dadef801b3) Git 2.43-rc1 před 7 dny (8ed4eb7538) Sloučit větev ‚tb/rev-list-unpacked-fix’
- Do „git for-each-ref“ a podobných příkazů byla přidána možnost aplikovat pravidla .mailmap na specifikátory formátu zadané pomocí volby „—format“, jako jsou „%(authorname)“ a „%(committeremail)“.
Zdroj: opennet.ru
