Git 2.55

Představení vydání distribuovaného systému správy zdrojových kódů Git 2.55. Mezi klíčovými změnami: výchozí zahrnutí sestavení s Rust, implementace procesu fsmonitor pro Linux, nová strategie repackování inkrementálního MIDX indexu, příkaz git history fixup pro opravu commitu, optimalizace generování bitmap dostupnosti objektů, podpora paralelního provádění hooků, příkaz git format-rev. Kód Git distribuováno pod licencí GPLv2+.

Ve srovnání s předchozí verzí bylo do nové verze přijato 505 změn připravených za účasti 100 vývojářů, z nichž 33 se účastnilo vývoje Git poprvé.

Hlavní novinky (github.blog, gitlab.com/blog, gitlab.com/git-scm):

  • Ve výchozím nastavení je zahrnuta podpora komponent napsaných v jazyce Rust. Kompilátor rustc přidán v počtu závislostí sestavení. Pro sestaveni bez Rustu lze použít příznak NO_RUST=1 při spuštění nástroje make nebo -Drust=disabled při provádění meson configure. Možnost vypnout sestavení s Rustem bude podporována až do větve Git 3.0, ve které bude Rust bylo zapnuto v počtu povinných závislostí. V jazyce Rust byla implementována vrstva pro přenositelnost mezi konfiguracemi s hashovacími funkcemi SHA-1 a SHA-256, stejně jako některé vnitřní funkce, jako je kódování a dekódování celočíselných hodnot proměnné délky. V budoucnu se očekává přepracování významnějších vnitřních komponent Git na Rust.
  • Do experimentálního příkazu "git history", který poskytuje možnosti pro přepisování historie změn, byla přidána operace „git history fixup“ pro opravu commitu. Operace fixup umožňuje přesunout změny přidané pomocí git add do dřívějšího commitu a automaticky přepsat všechny následující commity podobně jako při provedení příkazu git commit —fixup=<commit> a spuštění git rebase —autosquash <commit>~.
  • Pro platformu Linux byl implementován background proces fsmonitor, který sleduje změny v souborovém systému pomocí mechanismu inotify a umožňuje obejít se bez procházení celým pracovním adresářem při provádění příkazů jako je git status. Aktivace se provádí prostřednictvím nastavení „core.fsmonitor».
  • Do týmu git repack byla přidána volba —write-midx=incremental, která implementuje novou strategii aktualizace metadat v inkrementálním MIDX indexu (multi-pack index), která umožňuje obejít se bez přepravy celého indexu. V inkrementálním vícestupňovém indexu se místo jednoho velkého indexu, obsahujícího informace o rozdělení objektů v pack souborech, používá dělení na vrstvy — každá vrstva pokrývá určité množství pack souborů a je uchovávána v samostatném bitmapovém souboru. Taková struktura umožňuje přidávat do indexu data o objektech v nových pack souborech, připojujíc nové vrstvy k indexu bez rekonstrukce stávajících vrstev. Příkaz git repack —write-midx=incremental umožňuje přidat do inkrementálního MIDX indexu novou vrstvu, pokrývající nedávno vytvořené pack soubory. V kombinaci s režimem balení repozitářů —geometric nová příkaz nabízí možnost sloučit nové objekty z několika pack souborů do jednoho většího pack souboru a v případě potřeby provést balení a sloučení několika sousedních vrstev inkrementálního MIDX indexu. Taková strategie umožňuje při provádění git repack přepisovat pouze horní vrstvy, zatímco staré velké vrstvy zůstávají nedotčeny, a také zabránit nekontrolovatelnému rozrůstání řetězce vrstev, přičemž celkový počet vrstev se udržuje na úrovni úměrné logaritmu celkového počtu objektů.
  • Generování bitových map dostupnosti objektů bylo výrazně optimalizováno díky novému algoritmu pro procházení stromem objektů, který vylučuje nadbytečnou rekurzi, ukládání pozic objektů v cache, třídění bitmap před jejich sloučením operací XOR a přepracování kódu pro vytváření bitmap pseudosloučení (pseudo-merge). V testovacím repozitáři optimalizace umožnila zkrátit čas generování bitmap z 612 na 294 sekund.
  • Byla implementována možnost paralelního provádění nezávislých hooků V konfiguračních souborech. Současně nemohou být spouštěny háčky, které ovlivňují společný stav nebo ho zohledňují, například měnící poznámky k commitům nebo zkoumá úložiště a pracovní strom. Je však možné současně spouštět háčky pro kontrolu pomocí linteru a provádění unit testování. Háčky umožňující paralelní provádění se nastavují pomocí parametru hook.jméno_háčku.parallel = true. Počet současně spouštěných úloh je určen pomocí nastavení hook.jobs, hook..jobs nebo volby příkazového řádku -j.
  • V příkazu git pack-objects —path-walk byla implementována možnost určování filtrů, jako jsou blob:none, blob:limit=, tree:0, object:type=, sparse: a combine:. V provedeném testu odstranění blobů při spuštění —path-walk umožnilo zkrátit velikost vytvořeného pack souboru o 16%.
  • Byl přidán příkaz git format-rev pro formátování revizí a názvů objektů, které jsou zmíněny v seznamech commitů nebo se vyskytují v libovolném textu (například může být použit v háčcích pro zpracování poznámek k commitům).

git last-modified | git format-rev —stdin-mode=text —format=%an

Junio C Hamano builtin/commit.c

  • Ve výchozím nastavení je aktivní escape většiny sekvencí ovládání terminálu v informačních zprávách a chybových textech, které server předává. Při volání na škodlivý server mohly být takové escape sekvence použity k skrytí nebo modifikaci výstupu, například pomocí escape sekvencí pro pohyb kurzoru a vymazání textu. Zůstala podpora escape sekvencí pro zvýraznění prvků barvou.
  • Příkaz git checkout -m nyní automaticky ukládá konfliktní místní změny do oblasti stash bez nutnosti neprodleného vyřešení konfliktu.
  • Do příkazu git push byla přidána možnost umístit větev na několik externích Git serverů jedním příkazem. Například pro přenos větve main nejen na hlavní server, ale i na zrcadla lze vytvořit skupinu publish ze serverů github, gitlab a mirror:

git config remotes.publish "github gitlab mirror"
git push publish main

  • Do příkazu git log —graph byla přidána možnost —graph-lane-limit= pro omezení počtu vertikálních pruhů při vizualizaci větví, což umožňuje ponechat místo na obrazovce pro data o commitech v repozitářích s velkým počtem větví.

…
* | | | | 619931f561 Sloučení větve ‘dl/posix-unused-warning-clang’
|\ \ \ \ \
| * | | | ~ cf48887610 compat/posix.h: zjednodušit porovnání GIT_GNUC_PREREQ()
| * | | | ~ ffd45926dc compat/posix.h: vyčistit GIT_GNUC_PREREQ() a UNUSED
|\ \ \ \ \~
| * | | | ~ 3f5203eeb4 ls-files: filtrovat pathspec před lstat

  • Do příkazů git log a git rev-list byla přidána možnost —max-count-oldest=, která umožňuje vybrat N nejstarších commitů v rozsahu.

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