Megjelent a Git 2.50 – fontos változások a csomagkezelésben, egyesítésben és a teljesítményben

8/10
A biztonsági szempontból nem kritikus, viszont a szoftver stabilitását és megbízhatóságát jelentősen javító, technikai mérföldkőnek számító fejlesztéseket hoz. Ha valaki rendszeresen dolgozik Git-tel professzionális vagy közösségi fejlesztési környezetben, úgy erősen ajánlott a frissítés

A nyílt forráskódú verziókezelő rendszerként világszerte használt Git elérte a 2.50-es verziót, amely 98 közreműködő munkáját tartalmazza, köztük 35 új fejlesztőét. A Git 2.50 frissítés számos területen hoz előrelépést: fejlettebb objektumkezelés, gyorsabb összevonási logika, hatékonyabb tárolókarbantartás és jobb támogatás a nagy méretű, komplex Git-repokhoz. A változások célja nem csupán a teljesítmény növelése és a régi hibák kijavítása volt, hanem az is, hogy a Git jövőbeni méretezhetőségét és használhatóságát tovább erősítsék, különösen a vállalati és monorepo környezetekben.

Megjelent a Git 2.50 – fontos változások a csomagkezelésben, egyesítésben és a teljesítményben

Jelentős átalakítások a „Cruft pack” területén

A Git 2.50 egyik legnagyobb újítása a „cruft pack” kezelés jelentős átalakítása. A cruft packok célja, hogy a nem hivatkozott Git objektumokat elkülönítve tárolják a rendszerből való fokozatos eltávolítás érdekében. Korábban ezek frissítése nehézkes volt, mivel új objektum hozzáadásakor a teljes packot újra kellett írni. A 2.43-as verzió bevezetett ugyan egy --max-cruft-size opciót, de annak működése zavaros és hibás volt, mivel a méretkorlát egyszerre szabályozta az egyes csomagok méretét és az összefésülés lehetőségét. A Git 2.50-ben ez kettéválik: az új --combine-cruft-below-size opció lehetővé teszi a meglévő csomagok egyesítését méret alapján, míg --max-cruft-size mostantól csak az újonnan keletkező csomagok méretét szabályozza. Emellett egy kritikus hibát is javítottak, amely korábban megakadályozta az objektumok megfelelő „frissítését”, így azok túl korán kerülhettek törlésre.

Skálázhatóbb többcsomagos indexelés és bitmap támogatás

A többcsomagos index (MIDX) már korábban is lehetővé tette több packfile hatékony keresését egyetlen index segítségével, és most a Git 2.50-es verzióban már az elérhetőségi bitmapok is támogatottak a rétegezett MIDX struktúrákban. Ez lehetővé teszi, hogy egy hatalmas repo különböző rétegeiben lévő commitjaihoz bitmapot rendeljünk, ezzel jelentősen gyorsítva az elérhetőségi vizsgálatokat. Minden MIDX-réteg saját bitmap fájllal rendelkezhet, így a klónozási és keresési műveletek hatékonysága drámaian javulhat. Bár ez még kísérleti funkció, a nagy tárolók karbantartása szempontjából komoly előrelépést jelent.

A merge motor teljes lecserélése

A Git 2.50 egyik történelmi jelentőségű változása, hogy az „ORT” összevonási motor teljes mértékben kiváltotta a régi „recursive” rendszert, amely több mint másfél évtizedig szolgált. Az ORT motor gyorsabb, könnyebben karbantartható, és lehetőséget biztosít arra is, hogy két commit egyesíthetősége eldönthető legyen anélkül, hogy a művelet ténylegesen objektumokat írna a repokba.

$ git merge-tree --quiet

Ez a parancs például most már csak a kilépési kód alapján is képes meghatározni az összevonás sikerességét. A korábbi motor kódját teljesen eltávolították, így mostantól kizárólag az új mechanizmus működik a háttérben.

Objektumkezelés és karbantartás finomítása, Reflog kezelés egyszerűsítése

A git cat-file parancs mostantól támogatja az objektumszűrési mechanizmust, így például fa típusú objektumok szűrése jóval egyszerűbbé vált. Emellett megszűnt a korábban kevéssé használt --allow-unknown-type opció, és az is, hogy a git hash-object ismeretlen típusú objektumokat tudjon létrehozni. A karbantartási parancsok, például git maintenance is új képességeket kaptak, így például a reflog-expire most már közvetlenül képes elavult bejegyzéseket törölni, és a worktree-prune eltávolítja a törött vagy használaton kívüli munkakönyvtárakat. A loose-objects feladat batch mérete is testreszabhatóvá vált.

Aki valaha is próbálta törölni egy ág teljes reflogját, az tudja, hogy a megfelelő parancs nem volt intuitív. A Git 2.50-ben bevezetett-

$ 

-parancs pontosan ezt a hiányosságot orvosolja, egyszerűsítve a korábban szükséges, kevésbé átlátható reflog expire --expire=all hívásokat.

HTTP és referencia optimalizáció

A Git HTTP-kapcsolatainak viselkedése is precízebben szabályozható lett: három új beállítás – http.keepAliveIdle, http.keepAliveInterval, http.keepAliveCount – segítségével a TCP Keepalive viselkedés is testre szabható, amennyiben az operációs rendszer támogatja. A referenciafrissítések is gyorsabbak lettek azáltal, hogy a git update-ref már nem ellenőrzi, hogy az adott név értelmezhető-e objektumazonosítóként, továbbá optimalizálták az iterátorok kezelését a referencia-előtagok keresésénél.

Perl eltávolítása és felhasználói felület finomítása, Gyorsabb klónozás bundle-urival

A Git egyik hosszú távú célja a Perl-függőség csökkentése volt, és ez a kiadás további lépéseket tett e téren. A tesztkészletből és a dokumentációs eszköztárból is sikerült kivonni a Perlt, helyette shell parancsokat vagy kis C programokat használnak. A git rebase -i mostantól egyértelműbben jelzi, hogy a commit üzenetek csak tájékoztató jellegűek: egy # karakterrel előtagolva jelennek meg, elkerülve a félreértéseket.

A bundle-uri képesség is fejlődött: a Git most már a teljes ref készletet hirdeti ki a szerver felé a bundle fájl betöltése után, ami jelentősen felgyorsítja a hiányzó objektumok lekérését a fill-in fetch során. Ez különösen fontos nagy tárolók részleges klónozásánál, ahol eddig nem mindig használták ki teljesen az elérhető adatokat.

Interaktív staging sparse checkout esetén

Végül, de nem utolsósorban a git add -p és a git add -i immár zavartalanul működik sparse checkout alatt is. Eddig ezek a parancsok kényszerítették a teljes index betöltését, mostantól viszont anélkül is használhatók, hogy a Git a kimaradó könyvtárakat előzetesen kitöltené. Ez a sparse index támogatásának egy újabb fontos mérföldköve.

További részletes információkért a Git 2.50 verzióval kapcsolatosan tekintsd meg a bejelentést.