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

Byla představena nová verze distribuovaného systému správy verzí Git 2.54. 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í. K zajištění integrity historie a odolnosti vůči „zpětným“ změnám se používá implicitní hashování celé předchozí historie v každém commitu a 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í verzí byla do nové verze zařazena 770 změn připravených za účasti 137 vývojářů (66 z nich se poprvé podílelo na vývoji Gitu). Hlavní novinky:

  • Byla implementována příkaz „git history“, který poskytuje experimentální možnosti pro přepisování historie změn, jednodušší a bezpečnější na používání než přestavění commitů pomocí příkazu „git rebase“. Jsou k dispozici dvě operace:
    • „git history reword “ pro přepsání zprávy ve zvoleném commitu bez změny pracovního adresáře a indexu (s výjimkou poznámky, ostatní zůstává nedotčeno). Například pro opravu překlepu.
    • „git history split “ pro interaktivní rozdělení vybraného commitu na dva různé commity s přesunutím vybraných částí ze základního commitu do nového commitu.

    V budoucích verzích se očekává přidání dalších příkazů: „git history fixup“ pro opravu commitu, „git history drop“ pro vymazání commitu, „git history reorder“ pro změnu pořadí commitů a „git history squash“ pro sloučení commitů.

  • Byl zaveden nový způsob určování zpracovatelů (hook) v konfiguračních souborech. Místo umístění skriptů se zpracovateli do adresáře „.git/hooks“ v každém repozitáři, lze nyní příkazy pro volání zpracovatelů zadávat přímo v konfiguračních souborech. Nastavení lze vázat na repozitář nebo uvádět v konfiguračních souborech platných pro všechny repozitáře (/etc/gitconfig) nebo repozitáře uživatele (~/.gitconfig). Je možné vázat několik zpracovatelů na jedno událost. Skripty z „.git/hooks“ se stále spouštějí, ale jsou spuštěny po zpracovatelích z konfiguračních souborů. Pro zobrazení seznamu zpracovatelů je třeba použít příkaz „git hook list“, a pro selektivní deaktivaci vyvolání zpracovatelů – nastavení „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
  • Ve zpracování příkazu „git maintenance“ je ve výchozím nastavení zapnuta 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 používanou strategií, která využívala logiku jako v příkazu „git gc“, nová strategie vyhýbá opakovanému balení všech objektů a vylučuje nadměrně 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ů).
  • Databáze objektů (ODB) a s ní související API byly převedeny na novou architekturu založenou na používání připojitelných backendů. Prováděná restrukturalizace abstrahuje formát ukládání objektů a v budoucnu umožní implementaci takových funkcí, jako jsou alternativní backendy a formáty objektů, například pro efektivnější ukládání velkých binárních souborů nebo pro optimalizaci práce velkých git-hostingů.
  • V příkazu „git repo structure“, který zobrazuje informace o struktuře repozitáře, je zajištěno zobrazení nejen celkové velikosti, ale také největších objektů každého typu, což umožňuje provést hodnocení velikosti bez použití externího nástroje git-sizer. $ git repo structure … | * Největší objekty | | | * Commity | | | * Maximální velikost [1] | 17.23 KiB | | * Maximální rodiče [2] | 10 | | * Stromy | | | * Maximální velikost [3] | 58.85 KiB | | * Maximální položky [4] | 1.18 k | | * Bloby | | | * Maximální velikost [5] | 1019.51 KiB | | * Tagy | | | * Maximální velikost [6] | 7.13 KiB |
  • V příkazu „git replay“, používaném místo „git rebase“ k rekonstrukci historie na serveru bez pracovního adresáře, je implicitně zahrnuto atomární aktualizace referencí (místo výstupu seznamu příkazů update-ref k ručnímu vykonání), byla implementována možnost „—revert“ k vrácení změn sérií commitů, je zajištěno vynechání výsledných prázdných commitů a je zde možnost rekonstrukce historie až k základnímu commitu.
  • Do příkazů „git rev-list“ a podobných byla přidána možnost „—maximal-only“ pro zobrazení pouze commitů, které nejsou dosažitelné jinými commity.
  • Do příkazu „git repo info“ byla přidána možnost „—keys“ pro výstup seznamu všech známých klíčů.
  • V příkazu „git add -p“ při navigaci mezi bloky kódu pomocí kláves „J“ a „K“ je zajištěno označování již schválených a vynechaných bloků. Byla přidána možnost „—no-auto-advance“ pro vypnutí automatického přechodu k dalšímu souboru, aby bylo možné vrátit se k předchozím souborům před commitem.
  • Byla optimalizována webová rozhraní „gitweb“ pro použití na mobilních zařízeních.
  • V příkazu „git apply —directory“ je před použitím zajištěna normalizace cest k souborům, jako například „.\/un\/..\/normalized\/path.“
  • Byla zdokumentována možnost přidávání vlastních podpříkazů umístěním souborů „git-<cmd>“ do adresáře s vykonatelnými soubory.
  • Do příkazu „git send-email“ byla přidána podpora klientských certifikátů.
  • Pro příkaz „git status“ byla implementována konfigurace „status.compareBranches“, pomocí které lze určit větve, s nimiž bude aktuální větev porovnávána. [status] compareBranches = @{upstream} @{push}
  • Do „git rebase“ byla přidána možnost „—trailer“ pro usnadnění přidávání metadat k všem commitům. git rebase —trailer „Reviewed-by: Test <test@example.com>“
  • Do týmu „git fast-import“ byla přidána možnost nahrazovat podpisy pro commity, které se staly neplatnými po importu.
  • Byla přidána podpora balení (compaction) vícestupňových MIDX indexů, při které se spojují malé vrstvy MIDX indexu obsahující informace o dostupnosti objektů a s nimi související bitmapové soubory, což umožňuje snížit počet akumulovaných vrstev ve starších repozitářích.
  • V příkazu „git backfill“ byla implementována možnost specifikovat revize (rozsahy commitů) a masky cest (pathspec) pro omezení částí historie změn, které se mají načíst. git backfill main~100..main git backfill — ‘*.c’
  • Byly přidány alternativní formy volání příkazu „git config list“ — „git config -l“ a „git config —list“.
  • Bylo povoleno používat znaky mimo ASCII v názvech aliasů příkazů definovaných v konfiguračním souboru. [alias „get“] command = fetch
  • Bylo změněno zobrazení podpisů, u kterých vypršela platnost GPG klíčů, ale které byly platné v době podepisování commitu. Tyto podpisy se nyní zobrazují jako platné s poznámkou o zastarání klíče (dříve byly zvýrazněny červeně, což vzbuzovalo dojem jejich neplatnosti).
  • Při přístupu k repozitářům přes HTTP byla zajištěna zpracování chyby s kódem 429 (Too Many Requests). Požadavky, které skončily takovou chybou, jsou nyní považovány za dočasné chyby, které by se měly po nějaké době zopakovat. Zpoždění před opakováním je možné nastavit pomocí volby „http.retryAfter“, počet pokusů — „http.maxRetries“, doba čekání — „http.maxRetryTime“.

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