Két hónapos fejlesztés után megjelent a Git 2.39-es verziója, amely egy elosztott forráskód-kezelő rendszer. A Git az egyik legnépszerűbb, legmegbízhatóbb és legmagasabb teljesítményű verziókezelő rendszer, amely rugalmas, nemlineáris fejlesztési eszközöket biztosít az ágazásra és az ágak összevonására alapozva. A történet integritásának megőrzésére és a „visszamenőleges” változtatásokkal szembeni ellenállás biztosítására implicit hash-elést alkalmaznak az összes korábbi történelemre minden egyes commitban. Lehetővé teszi a fejlesztők digitális aláírásokkal történő azonosítását is az egyes tagek és commitek esetében.
Az előző verzióhoz képest az új kiadásba 483 módosítás került be, amelyeket 86 fejlesztő készített, közülük 31-en vettek részt először a fejlesztésben. Főbb újdonságok:
- A „git shortlog” parancs, amely a változástörténetből statisztikákat jelenít meg, új „—group” opciót kapott, amely lehetővé teszi a commitok önkényes csoportosítását nemcsak a szerző vagy commitáló alapján. Például a fejlesztők listájának megjelenítésére, amely tartalmazza a módosítások számát, figyelembe véve a „Co-authored-by” mezőben említett segítőket, a következő parancs használható: git shortlog -ns —group=author —group=trailer:co-authored-by
A shortlog kimenete formázási speciifikátorok segítségével aggregálható, és a „—group” opció jelentősen megkönnyíti összetett jelentések létrehozását, így elkerülhetjük a további rendezési parancsok végrehajtását. Például, ha jelentést akarunk készíteni arról, hogy hány commitot fogadtak el egy adott kiadás esetén minden hónapban, a következőt lehet megadni: git shortlog v2.38.0.. —date=’format:%Y-%m’ —group=’’ -s 2 2022-08 47 2022-09 405 2022-10 194 2022-11 5 2022-12. Korábban egy hasonló művelethez a sort és uniq eszközök bevonására lett volna szükség: git log v2.38.0.. —date=’format:%Y-%m’ —format=’’ | sort | uniq -c
- A "cruft packs" mechanizmus képességei kibővültek, lehetővé téve a hivatkozás nélküli elérhetetlen objektumok csomagolását a repozitóriumban (amelyekre nem hivatkoznak ágak vagy címkék). Az elérhetetlen objektumokat a szemétgyűjtő eltávolítja, de törlés előtt egy ideig a repozitóriumban maradnak a versenyállapotok elkerülése érdekében. A "cruft packs" mechanizmus lehetővé teszi, hogy az összes elérhetetlen objektum egy pack-fájlban tárolódjon, míg minden egyes objektum módosítási idejét egy külön táblázatban rögzítik, amit egy külön " .mtimes" kiterjesztésű fájlban tárolnak, hogy elkerüljék a közös módosítási idővel való ütközést.
A tényleges törlés előtt az elérhetetlen objektumok repozitóriumban eltöltött idejét az „—prune=<date>” opció határozza meg. Noha a törlés előtti késlekedés egy viszonylag hatékony és praktikus módszer a versenyhelyzet miatt a repozitórium megsérülésének megakadályozására, nem 100%-ban megbízható. Az eltávolított objektumok jövőbeli helyreállításának megkönnyítése érdekében az új kiadásban lehetőség nyílik az eltűnt objektumok megőrzésére, ehhez a "git repack" parancshoz hozzá lett adva az "—expire-to" opció, amely lehetővé teszi egy fájl megadását, amelyben létrehozhatók az összes eltávolított objektum külső másolatai. Például az utolsó 5 percben nem módosult elérhetetlen objektumok mentéséhez a backup.git fájlba a következő parancs használható: git repack —cruft —cruft-expiration=5.minutes.ago -d —expire-to=..\/backup.git
- Jelentősen megnőtt (akár 70%-kal) a "git grep —cached" művelet végrehajtásának sebessége a részleges klónozás (sparse-checkout) által érintett területeken, ahol részleges indexek (sparse index) állnak rendelkezésre. Korábban, amikor az "—cached" opciót megadták, először a normál indexben folytatták a keresést, majd a részlegesekben, ami észlelhető késlekedéseket okozott nagyobb repozitóriumok keresésekor.
- Gyorsítva van a végrehajtás szerveren új objektumok összefüggésének ellenőrzése előtt, mielőtt azok bekerülnének a repozitóriumba, a "git push" művelet végrehajtásakor. Azáltal, hogy a vizsgálat során csak a nyilvánított hivatkozásokat veszik figyelembe, egy 7 millió hivatkozásból álló tesztrepozitóriumban, amelyek közül csak 3% kerül a push művelet hatálya alá, a végrehajtott optimalizálások 4,5-ször csökkentették az ellenőrzési időt.
- A potenciális egész számok túltöltése ellen a "git apply" parancsban korlátozták a feldolgozott javítások maximális méretét. Ha a patch mérete meghaladja az 1 GB-ot, most hibaüzenet jelenik meg.
- A potenciális sebezhetőségek elleni védelem érdekében változtatásokat vezettek be a HTTP/2 lehetőségek mellett használt h2h3 modul fejléceiben található felesleges információk tisztítására, amikor a GIT_TRACE_CURL=1 vagy GIT_CURL_VERBOSE=1 lehetőségeket használják.
- A checkout művelet végrehajtásakor, ha a kiválasztott ág egy másik ágra mutató szimbolikus hivatkozás, a "git symbolic-ref HEAD" parancs most a célág nevét adja vissza, nem pedig a szimbolikus hivatkozás nevét.
- Hozzáadva az @{-1} argumentum támogatása a "--edit-description" opcióhoz („git branch --edit-description @{-1}”), amely lehetővé teszi a múltbeli ág leírásának szerkesztését.
- Hozzáadva a "git merge-tree --stdin" parancs, amely lehetővé teszi paraméterlisták átadását a standard bemeneten.
- Hálózati fájlrendszereken alapértelmezés szerint le van tiltva a fájlrendszer-változásokat követő fsmonitor feldolgozó.
Forrás: opennet.ru
