Git 2.39-os forrásvezérlő kiadás

Két hónapos fejlesztés után megjelent a Git 2.39 elosztott forrásvezérlő rendszer. A Git az egyik legnépszerűbb, legmegbízhatóbb és nagy teljesítményű verziókezelő rendszer, amely rugalmas, elágazáson és összevonáson alapuló, nem lineáris fejlesztői eszközöket biztosít. Az előzmények sértetlenségének és a visszamenőleges változtatásokkal szembeni ellenállás biztosítására minden commit során a teljes korábbi előzmény implicit kivonatolása történik, valamint lehetőség van az egyes címkék és commitok hitelesítésére is a fejlesztők digitális aláírásával.

Az új verzió az előző kiadáshoz képest 483 változtatást tartalmazott, 86 fejlesztő részvételével készült, ebből 31 először vett részt a fejlesztésben. Főbb újítások:

  • A „git shortlog” parancs, amely a változások előzményeinek statisztikai adatait tartalmazó összegzések megjelenítésére szolgál, hozzáadott egy „-group” opciót a véglegesítések tetszőleges csoportosításához mezők szerint, nem korlátozva a szerzőre vagy a végrehajtóra. Például a fejlesztők listájának megjelenítéséhez a változtatások számáról, figyelembe véve a "Társszerző" mezőben említett segítőket, használhatja a következő parancsot: git shortlog -ns --group=author - -group=trailer:társszerző

    A Shortlog kimenet formázási specifikációkkal összesíthető, a „--group” opció pedig jelentősen leegyszerűsíti az összetett jelentések létrehozását, és szükségtelenné teszi a további rendezési parancsokat. Ha például egy jelentést szeretne készíteni arról, hogy egy adott kiadáshoz hány véglegesítést fogadtak el minden hónapban, a következőket adhatja meg: git shortlog v2.38.0.. —date='format:%Y-%m' —group=' %cd' -s 2 2022-08 47 2022-09 405 2022-10 194 2022-11 5 2022-12 Korábban egy hasonló művelet végrehajtásához a sort és az egyedi segédprogramokat kellett volna használni: git log v2.38.0. .. —date='format:%Y -%m' —format='%cd' | rendezés | egyedi -c

  • Kibővültek a „cruft packs” mechanizmus lehetőségei, amelyeket olyan elérhetetlen objektumok becsomagolására terveztek, amelyekre nem hivatkoznak a tárolóban (amelyekre nem hivatkoznak ágak vagy címkék). Az elérhetetlen objektumokat a szemétgyűjtő törli, de a versenyfeltételek elkerülése érdekében egy bizonyos ideig a tárolóban maradnak, mielőtt törli őket. A „cruft packs” mechanizmus lehetővé teszi, hogy az összes elérhetetlen objektumot egy csomagfájlban tárolja, és az egyes objektumok módosítási idejére vonatkozó adatokat egy külön táblázatban jelenítse meg, külön fájlban tárolva „.mtimes” kiterjesztéssel, hogy azok ezt megtegyék. nem fedi át a teljes módosítási időt.

    Azt az időtartamot, ameddig az elérhetetlen objektumok a lerakatban maradnak a tényleges törlésük előtt, a „—prune=” opció határozza meg. " Bár a törlés előtti késleltetés meglehetősen hatékony és praktikus módja annak, hogy megelőzzük a versenyfeltételek miatti adattár-korrupciót, nem 100%-ban megbízható. A sérült adattár visszaállításának megkönnyítése érdekében az új kiadás lehetőséget biztosít a hiányzó objektumok mentésére úgy, hogy a „git repack” parancshoz hozzáadja a „--expire-to” opciót, amely lehetővé teszi egy fájl megadását a külső létrehozásához. az összes törölt objektum másolata. Például az elmúlt 5 percben nem változott elérhetetlen objektumok backup.git fájlba mentéséhez használhatja a következő parancsot: git repack --cruft --cruft-expiration=5.minutes.ago -d --expire -to=../backup.git

  • Jelentősen (akár 70%-kal) megnövelte a "git grep -cached" művelet sebességét, ha olyan területeken keres, ahol részleges klónozást használnak (sparse-checkout), és amelyekhez részleges indexek vannak (sparse index). Korábban a „-cached” opció megadásakor a keresést először a normál indexben, majd a részlegesekben végezték el, ami észrevehető késésekhez vezetett a nagy tárolókban történő kereséskor.
  • Felgyorsult az új objektumok koherenciájának kiszolgáló általi ellenőrzése, mielőtt a „git push” művelet során a lerakatba helyeznék őket. Azzal, hogy egy 7 millió linket tartalmazó teszttárban, amelynek csak 3%-át fedi le a push művelet, az ellenőrzéskor csak deklarált hivatkozások elszámolására váltott, a bevezetett optimalizálás lehetővé tette az ellenőrzési idő 4.5-szeres csökkentését.
  • A kódban előforduló lehetséges egész túlcsordulás elleni védelem érdekében a „git apply” parancs korlátozza a feldolgozható javítások maximális méretét. Ha a javítás mérete meghaladja az 1 GB-ot, hibaüzenet jelenik meg.
  • A potenciális sebezhetőségek elleni védelem érdekében változtatásokat hajtottak végre a felesleges információk eltávolítása érdekében a fejlécekből, amikor a h2h3 modult a GIT_TRACE_CURL=1 vagy GIT_CURL_VERBOSE=1 opcióval együtt HTTP/2-vel együtt használja.
  • Amikor egy másik ágra mutató szimbolikus hivatkozást jelentő ágon hajt végre ellenőrzést, a „git symbolic-ref HEAD” parancs most a célág nevét jeleníti meg a szimbolikus hivatkozás neve helyett.
  • A @{-1} argumentum támogatása a „--edit-description” opcióhoz („git branch —edit-description @{-1}”) egy korábbi ág leírásának szerkesztéséhez.
  • A "git merge-tree --stdin" parancs hozzáadva a paraméterek listájának szabványos bemeneten keresztül történő átadásához.
  • A hálózati fájlrendszereken a fájlrendszer változásait figyelő fsmonitor kezelő alapértelmezés szerint le van tiltva.

Forrás: opennet.ru

Hozzászólás