Git 2.41 forrásvezérlő rendszer elérhető

Három hónapos fejlesztés után megjelent a Git 2.41 elosztott forrásvezérlő rendszer kiadása. A Git az egyik legnépszerűbb, legmegbízhatóbb és nagy teljesítményű verziókezelő rendszer, amely rugalmas, nem lineáris fejlesztőeszközöket biztosít elágazáson és ágak összevonásán alapulóan. Az előzmények sértetlenségének és a visszamenőleges változtatásokkal szembeni ellenállóképesség biztosítása érdekében 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 a fejlesztők digitális aláírásával történő commit ellenőrzésére is.

A 542 fejlesztő közreműködésével készült új verzióba az előző kiadáshoz képest 95 változtatást fogadtak el, ebből 29 első alkalommal vett részt a fejlesztésben. Főbb újítások:

  • A lerakatban nem hivatkozott elérhetetlen objektumok továbbfejlesztett kezelése (nem hivatkozik az ágakra vagy a címkékre). Az elérhetetlen tárgyakat a szemétgyűjtő eltávolítja, de az eltávolítás előtt bizonyos ideig a tárolóban maradnak, hogy elkerüljék a versenykörülményeket. Az elérhetetlen objektumok periódusának nyomon követéséhez szükséges hozzájuk címkéket kötni a hasonló objektumok változási idejével, ami nem teszi lehetővé egy csomagfájlban való tárolásukat, amelyben minden objektumnak közös váltási ideje van. Korábban minden elérhetetlen objektumot külön fájlban tároltak, ami problémákhoz vezetett, ha nagyszámú volt olyan friss elérhetetlen objektum, amelyet még nem kellett törölni. Az új kiadásban alapértelmezés szerint a „cruft packs” mechanizmust használják az elérhetetlen objektumok csomagolására, amely lehetővé teszi az összes elérhetetlen objektum egy csomagfájlban való tárolását, és az egyes objektumok módosítási idejére vonatkozó adatok megjelenítését egy külön táblában tárolva. „.mtimes” kiterjesztésű fájl, és egy „.idx” kiterjesztésű indexfájllal kapcsolódik.
    Git 2.41 forrásvezérlő rendszer elérhető
  • Alapértelmezés szerint a fordított index (revindex) fenntartása a lemezen a csomagfájlokhoz engedélyezett. A torvalds/linux tárolókon tesztelve a fordított index használata lehetővé tette számunkra, hogy 1.49-szeresére gyorsítsuk fel az erőforrás-igényes "git push" műveleteket, és az egyszerű műveleteket, például egyetlen objektum méretének kiszámítását a "git cat-" segítségével. file --batch='%(objectsize:disk)' » 77 alkalommal. A fordított indexű fájlok (.rev) a lerakaton belül, a ".git/objects/pack" könyvtárban lesznek tárolva.

    Emlékezzünk vissza, hogy a Git minden adatot objektumok formájában tárol, amelyeket külön fájlokban helyezünk el. A tárhellyel való munka hatékonyságának növelése érdekében az objektumokat csomagfájlokba helyezik, amelyekben az információk egymás után következő objektumok folyamaként jelennek meg (hasonló formátumot használnak az objektumok git fetch és git parancsokkal történő átvitelekor push parancsok). Minden csomagfájlhoz létrejön egy indexfájl (.idx), amely lehetővé teszi, hogy nagyon gyorsan meghatározzuk a csomagfájlban azt az eltolást, amellyel az adott objektumot az objektumazonosító tárolja.

    Az új kiadásban található fordított index célja, hogy egyszerűsítse az objektumazonosító meghatározásának folyamatát a csomagfájlban lévő objektum helyére vonatkozó információk alapján. Korábban az ilyen átalakítást menet közben hajtották végre a csomagfájl elemzése során, és csak a memóriában tárolták, ami nem tette lehetővé az ilyen indexek újrafelhasználását, és az indexet minden alkalommal elő kellett állítani. Az index felépítése az objektum-pozíció párok tömbjének felépítésére és pozíciók szerinti rendezésére redukálódik, ami nagy csomagfájlok esetén sokáig tarthat.

    Például az objektumok tartalmának közvetlen indexet használó megjelenítési művelete 62-szer gyorsabb volt, mint azon objektumok méretének megjelenítése, amelyeknél a pozíció-objektum kapcsolati adatok nem voltak indexelve. A fordított index használata után ezek a műveletek körülbelül ugyanannyi időt vettek igénybe. A fordított indexek lehetővé teszik az objektumok küldésének felgyorsítását lekérési és leküldési parancsok végrehajtása során a kész adatok lemezről történő közvetlen átvitelével.

    Git 2.41 forrásvezérlő rendszer elérhető

  • Támogatás hozzáadva a WWW-Authenticate fejléceknek a hitelesítőadat-kezelő és a hitelesítési szolgáltatás közötti „hitelesítőadat-segéd” protokollhoz, amelyet a korlátozott adattárak elérésekor használt hitelesítő adatok átadására használnak. A WWW-Authenticate fejléc támogatása lehetővé teszi az OAuth-hatókör-paraméterek átadását a lerakatokhoz való felhasználói hozzáférés részletesebb elkülönítéséhez, és a kérésekhez elérhető hatókörök behatárolásához.
  • Hozzáadott formátumbeállítás "%(ahead-behind: )", amely lehetővé teszi, hogy azonnal tájékozódjon az adott ágban jelenlévő vagy hiányzó commitok számáról egy másik ághoz viszonyítva (mennyivel van lemaradva vagy megelőzve az egyik ág a commitok szintjén). Korábban ezeknek az információknak a megszerzéséhez két külön parancsra volt szükség: "git rev-list --count main..my-feature" az ágra vonatkozó egyedi commitok számának lekérdezéséhez, és a "git rev-list --count my-feature.. main", hogy megkapja a hiányzó véglegesítések számát. Most az ilyen számítások egyetlen utasításra redukálhatók, ami leegyszerűsíti az íráskezelőket és csökkenti a végrehajtási időt. Például a nem egyesített ágak megjelenítéséhez és annak értékeléséhez, hogy a fő ág mögött vagy előtt vannak-e, használhat egysoros vonalat: $ git for-each-ref --no-merged=origin/HEAD \ --format=' %(refname:short) %(ahead-behind :origin/HEAD)' \ refs/heads/tb/ | oszlop -t tb/cruft-extra-tips 2 96 tb/for-each-ref – 16 96 tb/roaring-bitmaps kizárása 47 3 a korábban használt szkript helyett, amely 17-szer lassabb: $ git for-each-ref - format='%(refname:short)' --no-merged=origin/HEAD \ refs/heads/tb | while read ref do ahead="$(git rev-list --count origin/HEAD..$ref)" behind="$(git rev-list --count $ref..origin/HEAD)" printf "%s %d %d\n" "$ref" "$előre" "$mögött" kész | oszlop -t tb/cruft-extra-tippek 2 96 tb/minden-ref. kizárása 16 96 tb/ordító bittérképek 47 3
  • "--porcelain" opció hozzáadva a "git fetch" parancshoz, amely a " formátumú kimenetet generálja" ”, kevésbé olvasható, de kényelmesebb a szkriptekben való elemzéshez.
  • A "fetch.hideRefs" beállítás hozzáadva a "git fetch" műveletek felgyorsítása érdekében a hivatkozások egy részének elrejtésével a helyi adattárban annak ellenőrzési szakaszában, hogy a szerver elküldte-e az objektumok teljes készletét, ami időt takarít meg, mivel az ellenőrzést csak a szerverekre korlátozza. ahonnan közvetlenül lekérhetők az adatok. Például egy nagyszámú nyomon követett külső hivatkozást tartalmazó tárolókkal rendelkező rendszeren végzett teszteléskor a $remote célkiszolgáló kivételével az összes hivatkozás kizárása a „git fetch” művelet 20 percről 30 másodpercre csökkentette. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ fetch $remote
  • A "git fsck" parancs lehetővé teszi a sérülések, az ellenőrzőösszeg-egyeztetés és az értékek helyességének ellenőrzését az akadálymentesítési bittérképekben és a fordított indexekben.
  • A "git clone --local" parancs most hibát jelez, amikor a $GIT_DIR-ben található szimbolikus hivatkozásokat tartalmazó lerakatból próbál másolni.

Forrás: opennet.ru

Hozzászólás