Git 2.54

Git 2.54

Představení vydání distribuovaného systému správy zdrojových kódů Git 2.54. Git se vyznačuje vysokým výkonem a poskytuje nástroje 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 "zpětným" změnám se používá implicitní hashování celé předchozí historie v každém commitu a digitální podpisy jednotlivých tagů a commitů od vývojářů. Kód Git distribuováno pod licencí GPLv2+.

Ve srovnání s předchozí verzí obsahuje nová verze 770 změn, připravených za účasti 137 vývojářů (66 z nich se podílelo na vývoji Git poprvé).

Hlavní novinky:

  • Byl implementován 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řebazování commitů příkazem git rebase. Jsou k dispozici dvě operace:

    • git history reword pro přepis zprávy ve zvoleném commitu bez změny pracovního adresáře a indexu (kromě poznámky zůstává zbytek nedotčen). Například pro opravu překlepu.
    • git history split pro interaktivní rozdělení zvoleného commitu na dva různé commity s přesunem vybraných částí z původního commitu do další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 odstranění commitu, git history reorder pro změnu pořadí commitů a git history squash pro sloučení commitů.

  • Byla zavedena nová metoda definice handlerů (hook) v konfiguračních souborech. Místo umístění skriptů s handlery do adresáře .git/hooks v každém repozitáři je nyní možné definovat příkazy pro vyvolání handlerů přímo v konfiguračních souborech. Nastavení lze přiřadit k repozitáři nebo uvést v konfiguračních souborech platných pro všechny repozitáře (/etc/gitconfig) nebo uživatelské repozitáře (~/.gitconfig). Je možné přiřadit více handlerů k jednomu události. Skripty z .git/hooks nadále vyvolávají, ale spouštějí se po handlerech z konfiguračních souborů. Pro zobrazení seznamu handlerů je třeba použít příkaz git hook list, a pro selektivní zakázání vyvolání handlerů – 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

  • V příkazu „git maintenance“ je ve výchozím nastavení použita strategie geometric (git config set maintenance.strategy geometric), která zkracuje dobu údržby velkých monorepozitářů. Oproti dříve používané strategii, která využívala logiku příkazu git gc, nová strategie vyhýbá se opětovnému balení všech objektů a vylučuje příliš náročné operace, jako je sloučení 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í pluginových backendů. Restrukturalizace abstrahuje formát ukládání objektů a v budoucnu umožní implementaci možností, 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 fungování velkých git hostingů.
  • V příkazu „git repo structure”, která zobrazuje informace o struktuře repozitáře, byla zajištěna nejen celková velikost, ale i zobrazení největších objektů každého typu, což umožňuje posoudit velikost 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ísto git rebase k opětovnému vytvoření historie na serveru bez pracovního stromu, obsahuje ve výchozím nastavení atomární aktualizaci odkazů (namísto výstupu seznamu příkazů update-ref pro ruční provedení), byla implementována možnost —revert pro zrušení změn z řady commitů, je zajištěno odmítnutí výsledných prázdných commitů a byla zavedená možnost znovu vytvořit historii až po kořenový commit.
  • V „git rev-list“ a podobné příkazy byla přidána možnost —maximal-only pro zobrazení pouze commitů, které nejsou dosažitelné jinými commity.
  • V 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 -pPř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ů. Přidána možnost —no-auto-advance pro deaktivaci automatického přechodu k následujícímu souboru, aby bylo možné se vrátit k předchozím souborům před commitem.
  • Byla provedena optimalizace webového rozhraní «gitweb» pro práci z mobilních zařízení.
  • V příkazu „git apply –directory» zajišťuje normalizaci cest k souborům, jako je .\/un\/..\/normalized\/path, před použitím.
  • Dokumentována možnost přidání vlastních podpříkazů prostřednictvím umístění souborů git-<cmd> do adresáře s vykonatelnými soubory.
  • V příkazu „git send-email» 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, se kterými bude prováděno porovnání aktuální větve:

[status] compareBranches = @{upstream} @{push}

  • V „git rebase» přidána možnost —trailer pro usnadnění přidávání metadat ke všem commitům:

git rebase —trailer "Reviewed-by: Test <test@example.com>"`

  • V příkazu „git fast-import» přidána možnost výměny podpisů pro commity, které se staly neplatnými po importu.
  • Byla přidána podpora balení (compaction) vícebalíčkových indexů MIDX (multi-pack index), při které se spojí drobné vrstvy MIDX-indexu s informacemi o dostupnosti objektů a s nimi souvisejícími bitmapovými soubory, což umožňuje snížit počet nahromaděných vrstev v dlouho existujících repozitářích.
  • V příkazu git backfill byla implementována možnost určování revizí (rozsahů commitů) a masek cest (pathspec) pro omezení stahovaných částí historie změn:

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.
  • Povoleno používání ne-ASCII znaků 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 touto chybou, jsou nyní považovány nikoli za fatální problém, ale jako dočasnou chybu, na kterou by mělo být po určité době reagováno opětovným pokusem. Zpoždění před opětovným pokusem se nastavuje pomocí možnosti http.retryAfter, počet pokusů – http.maxRetries, a čas čekání – http.maxRetryTime.

Zdroj: linux.org.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