Megérkezett a Git 2.37 elosztott verziókezelő rendszer kiadása. A Git az egyik legnépszerűbb, megbízható és nagy teljesítményű verziókezelő rendszer, amely rugalmas, elágazáson és összevonáson alapuló nemlineáris fejlesztési eszközöket biztosít. A történet integritásának megőrzésére és a visszamenőleges módosításokkal szembeni ellenállás érdekében implicit hash-olással biztosítja a korábbi történelem minden részét minden egyes elkötelezésnél, emellett a fejlesztők által aláírt digitális aláírások is érvényesíthetők a különböző címkék és elkötelezések esetében.
A legutóbbi kiadáshoz képest az új verzióban 395 változtatás került bevezetésre, amelyeket 75 fejlesztő készített, közülük 20 első alkalommal vett részt a fejlesztésben. Főbb újdonságok:
- Készen áll a széleskörű használatra a részleges indexek (sparse index) mechanizmusa, amely csak a repositorium egy részét fedi le. A részleges indexek javítják a teljesítményt és helyet takarítanak meg olyan repozitóriumokban, ahol részleges klónozási (sparse-checkout) műveletek zajlanak, vagy ahol nem teljes másolatot használnak. Az új kiadásban befejeződött a részleges indexek integrálása a „git show”, „git sparse-checkout” és „git stash” parancsokba. A legnagyobb teljesítménynövekedés a részleges indexek használatával a „git stash” parancsnál tapasztalható, amelynek végrehajtási sebessége egyes helyzetekben 80%-kal nőtt.
- Bevezették az új «cruft packs» mechanizmust, amely lehetővé teszi a hozzáférhetetlen (unreachable) objektumok csomagolását, amelyekre a tárolóban nincsenek hivatkozások (amelyeket nem hívnak meg ágak vagy címkék). A hozzáférhetetlen objektumokat a hulladékgyűjtő törli, de törlés előtt egy ideig a tárolóban maradnak a versenyhelyzetek elkerülése érdekében. A hozzáférhetetlen objektumok ott tartózkodásának időszakának nyomon követéséhez időbélyegeket kell hozzárendelni, ami nem teszi lehetővé, hogy azokat egyetlen pack fájlban tárolják, amelyben minden objektumnak közös módosítási ideje van. A korábban alkalmazott megoldás, amely minden objektumot külön fájlban tárolt, problémákhoz vezetett nagy számú friss, hozzáférhetetlen objektum esetén, amelyek még nem estek törlés alá. Az új «cruft packs» mechanizmus lehetővé teszi, hogy az összes hozzáférhetetlen objektumot egyetlen pack fájlban tárolják, míg az egyes objektumok módosítási idejéről szóló adatok egy külön táblázatban kerülnek rögzítésre, amely a «.mtimes» kiterjesztésű fájlban található.
- Windows és macOS rendszerekhez bevezették a beépített fájlrendszer-változások nyomon követésére szolgáló mechanizmust, amely lehetővé teszi a munkakönyvtár teljes átvizsgálása nélküli eljárások végrehajtását, például a «git status» esetében. Korábban a hook-okon keresztül külső fájlrendszer-változáskövető segédprogramokat, például a Watchman-t lehetett használni, de ez további programok telepítését és konfigurálását igényelte. Mostantól ez a funkció beépítve érhető el, és engedélyezhető a «git config core.fsmonitor true» parancs kiadásával.
- A «git sparse-checkout» parancsban elavultnak nyilvánították az alternatív «—cone» mód támogatását, amely a részleges klónozás mintáinak meghatározására szolgál. Ez lehetővé tette, hogy a klónozandó tárolórész meghatározásakor külön fájlokat soroljunk fel a «.gitignore» szintaxis használatával, ami nem teszi lehetővé a részleges indexek optimalizálását.
- Növelhető a fsync() hívás testreszabási rugalmassága a változások lemezre írásakor. A „core.fsyncMethod” paraméterhez hozzáadták a „batch” szinkronizálási stratégiát, amely lehetővé teszi a nagy számú különálló fájl írásának gyorsabb végrehajtását azáltal, hogy a visszaírási gyorsítótárban felhalmozódó változásokat egyetlen fsync() hívással írja ki. A végrehajtott teszt során, ahol 500 fájlt adtak hozzá a „git add” parancsot használva, az új mód aktiválásával a művelet 0,15 másodperc alatt teljesült, míg fsync() hívása minden fájlhoz 1,88 másodpercet vett igénybe, fsync használata nélkül pedig mindössze 0,06 másodpercet.
- A ágbejáró parancsokhoz, mint például a „git log” és a „git rev-list”, hozzáadták az „—since-as-filter=X” opciót, amely lehetővé teszi a „X”-nál régebbi létrehozási idejű commitok információinak kiszűrését. Ezzel szemben az „—since” opcióval az új parancs szűrőként van implementálva, amely nem állítja meg a keresést az első, a megadott időt meghaladó commit után.
- A „git remote” parancs esetében a „-v” zászló megadásakor részleges klónokkal kapcsolatos információval bővült a kimenet.
- Hozzáadták a „transfer.credentialsInUrl” beállítást, amely elfogadja a „warn”, „die” és „allow” értékeket. Amennyiben a „remote..url” paraméterben nyílt szövegként adnak meg hitelesítő adatokat, a „fetch” vagy „push” műveletek megkísérlése hibaüzenettel zárul, ha a „transfer.credentialsInUrl” beállítás „die”, vagy figyelmeztetéssel, ha „warn” értékű.
- Alapértelmezés szerint a „git add -i” parancs interaktív módja új implementációt kapott, amelyet Perl-ról C-re írtak át.
Forrás: opennet.ru
