Git 2.50: Vylepšení výkonu pro velké repozitáře a další

git-2.50

Před pár dny to bylo oznámeno Vydání nové verze projektu Git 2.50, zavádí více než 600 změn poháněna aktivní komunitou, která tentokrát zahrnovala 98 vývojářů, včetně 35 nových přispěvatelů.

Tato nová verze Gitu 2.50 se vyznačuje integrací nových příkazů (git-diff-pairs), novými funkcemi pro čištění, filtrování a údržbu, nahrazením rekurzivního slučovacího enginu za ORT a také vylepšeními výkonu a opravami chyb.

Klíčové nové funkce Git 2.50

V této nové verzi Gitu 2.50 je jednou z nejdůležitějších nových funkcí optimalizace při ošetřování tzv. „cruft packů“, Tedy balíčky objektů, které jsou nepřístupné nebo na které neodkazují větve či tagy. Git tradičně ukládal tyto objekty do jednoho velkého souboru balíčku, což mohlo způsobit problémy s výkonem při přebalování repozitářů s mnoha z těchto položek.

S novou verzí, Git umožňuje rozdělit tyto cruft balíčky do několika menších souborů, což snižuje využití disku a zlepšuje výkon vstupu/výstupu pro hromadné operace. Kromě toho, sa zadejte možnost –combine-cruft-below-size, což umožňuje flexibilněji kombinovat malé balíčky do jednoho než předchozí volba –max-cruft-size, aniž by se omezovala celková velikost souborů. Tato nová funkce je obzvláště užitečná v projektech s osiřelými objekty rozmístěnými ve více balíčcích.

Dalším vylepšením zaměřeným na rozsáhlá úložiště je experimentální podpora pro postupná aktualizace Indexy MIDX , který Ukládají informace o objektech v oddělených vrstvách pomocí bitmapových souborů, což umožňuje rychlejší aktualizace při přidávání nových commitů. Toto vylepšení je zásadní pro velké repozitáře, které vyžadují rychlé indexování bez nutnosti kompletně přetvářet metadata.

Kompletní nahrazení rekurzivního slučovacího enginu ORT

Git 2.50 přináší zásadní změnu, např. trvalé odstranění rekurzivního fúzního enginu tradiční. Místo toho Používání ORT je konsolidováno, zajišťuje také účinek modernější, udržovatelnější a efektivnější fúzní motor. ORT nejen nabízí přesnější analýzu konfliktů, ale také umožňuje ověřit, zda je sloučení možné bez generování dalších objektů. Příkaz merge-tree nyní navíc obsahuje volbu –quiet pro použití jako tichá kontrola sloučení bez úpravy repozitáře.

gitt-diff-pairs: řešení problémů se škálovatelností

Revize kódu je nepochybně jedním z pilířů moderního kolaborativního vývoje a rozdíly neboli diffy mezi revizemi hrají v tomto procesu důležitou roli. S příchodem Gitu 2.50 bylo představeno řešení navržené pro škálovatelnost: nový příkaz git-diff-pairs.

Tradičně se pro porovnání dvou revizí používá příkaz jako:

git diff HEAD~1 HEAD

Tím se vygeneruje kompletní záplata obsahující všechny změny mezi uvedenými revizemi. I když je to v mnoha případech efektivní, může to být problém s výkonem při práci s velkými sadami upravených souborů.

Proto byl git-diff-pairs speciálně navržen tak, aby přijímal surový vstup přímo z výstupu git diff-tree a efektivně a přesně generoval odpovídající záplaty.

Použití je jednoduché jako:

git diff-tree -r -z -M HEAD~ HEAD | git diff-pairs -z

Tento příkaz bere zadané páry objektů blob a generuje přesný výstup diff, přičemž zachovává kontextové informace a umožňuje rozdělení práce do menších dávek. To otevírá dveře paralelnímu zpracování, zlepšuje efektivitu zdrojů a usnadňuje škálovatelnost v nástrojích založených na diffu, jako je GitLab.

Nové funkce pro čištění, filtrování a údržbu

Git 2.50 obsahuje několik dalších nástrojů určených ke zlepšení údržby repozitářů:

  • Příkaz byl přidán drop reflogu v gitu, což umožňuje kompletně smazat reflog pro konkrétní větev, což je ideální pro vyčištění historie práce, když již nepotřebujete uchovávat předchozí reference.
  • Volba -filtr V Gitu je nyní k dispozici příkaz cat-file –batch, který umožňuje filtrovat výsledky podle typu objektu.

Kromě toho je zdůrazněno i několik interních optimalizací:

  • Vylepšené použití symbolických odkazů s ukládáním prefixů do mezipaměti a snížením redundantních kontrol.
  • Odstranění závislostí na Perlu v dokumentaci a testovacích skriptech, jejich nahrazení funkcemi shellu nebo implementacemi v jazyce C, což usnadňuje jejich kompilaci na systémech s minimalistickou konfigurací.
  • Včetně ovladače rozdíl_uživatelů pro analýzu rozdílů v souborech .ini.
  • Vylepšená kompatibilita příkazu git send-email se servery SMTP, jako je Outlook.

A konečně, pokud máte zájem dozvědět se o tom více, můžete se podívat na podrobnosti v následující odkaz.