A Git 2.55 kiadása, amely alapértelmezetten támogatja a Rust-ot

Bemutatásra került a Git 2.55-ös kiadás a forráskódok elosztott kezelésére szolgáló rendszerből. A legfontosabb változások között szerepel: a Rust-szal való alapértelmezett fordítás, a Linux számára készült fsmonitor folyamat implementálása, az inkrementális MIDX-index újra csomagolásának stratégiája, a „git history fixup” parancs a commit javítására, az objektumok elérhetőségi bitképeinek generálásának optimalizálása, a hook-ok párhuzamos végrehajtásának támogatása, valamint a „git format-rev” parancs. A Git forráshoz való hozzáférés GPLv2+ licenc alatt történik.

A korábbi kiadással összehasonlítva az új verzióba 505 változtatás került, amelyeket 100 fejlesztő készített, közülük 33-an először vettek részt a Git fejlesztésében. A legfontosabb újítások (1, 2, 3):

  • Alapértelmezés szerint a Rust nyelvre írt komponensek támogatása engedélyezve van. A rustc fordító
    hozzá lett adva a fordítási függőségek közé. A Rust nélküli fordításhoz a „NO_RUST=1” kapcsoló használható a make eszköz futtatásakor, vagy a „-Drust=disabled” opció a „meson configure” végrehajtásakor. A Rust használatának kikapcsolására lehetőség lesz a Git 3.0 verzióig, amelyben a Rust kötelező függőséggé válik. A Rust nyelven egy köztes réteget valósítottak meg a SHA-1 és SHA-256 hashekkel való hordozhatóság érdekében, valamint egyes belső funkciókat, például a változó hosszúságú egész értékek kódolását és dekódolását. A jövőben a Git jelentősebb belső komponenseinek átdolgozása várható Rust nyelven.
  • A „git history” kísérleti parancsához, amely lehetőségeket biztosít a változások történetének újraírására, hozzáadták a „git history fixup” műveletet a commit javítására. A „fixup” művelet lehetővé teszi a „git add” parancs segítségével hozzáadott változtatások áthelyezését egy korábbi commitba, és automatikusan átírja az összes további commitot, hasonlóan a „git commit —fixup=<commit>” végrehajtásához és a „git rebase —autosquash <commit>~” indításához.
  • Linux platformra megvalósították a fsmonitor háttérfolyamatot, amely az inotify mechanizmus segítségével figyeli a fájlrendszerben bekövetkező változásokat, lehetővé téve, hogy elkerülhető legyen a teljes munkakönyvtár átvizsgálása olyan parancsok, mint a „git status” végrehajtása során. Az aktiválás a „core.fsmonitor” beállítással történik.
  • A «git repack» parancshoz hozzáadódott a «—write-midx=incremental» mód, amely új frissítési stratégiát valósít meg az inkrementális MIDX-indexben (multi-pack index), lehetővé téve az egész index újrapakolásának mellőzését. Az inkrementális többcsomagos indexben egy nagy index helyett, amely az objektumok pack-fájlok közötti eloszlásáról tartalmaz információt, rétegek szerinti felosztás alkalmazandó – minden réteg meghatározott számú pack-fájlt ölel fel, és külön bitmap-fájlban tárolódik. Ez a struktúra lehetővé teszi, hogy új objektumok adatait adjuk hozzá az indexhez új pack-fájlokban, új rétegek csatolásával az indexhez anélkül, hogy a meglévő rétegeket rekonstruálnánk.

    A «git repack —write-midx=incremental» parancs lehetővé teszi egy új réteg hozzáadását az inkrementális MIDX-indexhez, amely a nemrégiben létrehozott pack-fájlokat öleli fel. Az új csomagolási móddal, mint például a „—geometric”, ez az új parancs lehetőséget ad az új objektumok több pack-fájlból való egyesítésére egy nagyobb pack-fájlba, valamint szükség esetén több szomszédos réteg csomagolására és egyesítésére az inkrementális MIDX-indexben. Ez a stratégia lehetővé teszi a «git repack» végrehajtásakor, hogy csak a felső rétegeket írjuk újra, miközben a régi nagy rétegek érintetlenek maradnak, és megszünteti a rétegek kontrollálatlan növekedését, fenntartva a rétegek számát egy arányos szinten, az objektumok összszámának logaritmusával.

  • Jelentősen optimalizálva lett az objektumok elérhetőségi bitmap-jainak generálása az új objektumfa bejárási algoritmus révén, amely kiküszöböli a felesleges rekurziót, tárolja az objektumok pozícióját, rendezve állítja össze a bitmátrixokat az XOR művelet használatával, és újraértelmezi a kódot a pszeudoegyesítő bitmap-ek létrehozásához. A tesztelési tárolóban az optimalizálások lehetővé tették, hogy 612 másodpercről 294 másodpercre csökkentsük a bitmátrixok generálási idejét.
  • Lehetővé vált a független hook-ok párhuzamos végrehajtása a konfigurációs fájlokban. Párhuzamosan nem lehet elindítani azokat a hook-okat, amelyek közös állapotra hatnak vagy azt figyelembe veszik, például a commit megjegyzéseit változtatják meg vagy az indexeket és a munkakövet figyelik. Ezzel szemben párhuzamosan futtathatók a hook-ok a linter ellenőrzésére és az egységtesztelésre. A párhuzamos végrehajtásra alkalmas hook-ok beállíthatók a "hook. имени_хука.parallel = true" paraméterrel. Az egyszerre futtatható munkák száma a hook.jobs, hook.<event>.jobs beállítással vagy a parancssori opció "-j" megadásával határozható meg.
  • A "git pack-objects —path-walk" parancsban lehetőség van szűrők megadására, mint például "blob:none", "blob:limit=<n>", "tree:0", "object:type=<type>", "sparse:<oid>" és "combine:". A végzett teszt során a blobok elhagyása a "—path-walk" végrehajtásakor 16%-kal csökkentette a létrehozott pack-fájl méretét.
  • Hozzáadva a "git format-rev" parancs, amely lehetővé teszi a revíziók és az objektumnevek formázását, amelyek megjelennek a commit listákban vagy találkoznak tetszőleges szövegben (például használható a commit megjegyzések feldolgozására szolgáló hook-okban).

    git last-modified | git format-rev —stdin-mode=text —format=%an

    Junio C Hamano builtin/commit.c

  • Alapértelmezés szerint a legtöbb terminálvezérlési sorozat elrejtése engedélyezve van az információs üzenetekben és a hibaszövegekben, amelyeket szerverrel. A rosszindulatú programokhoz való hozzáféréskor szerverhez az ilyen escape-sorozatok használhatók a kimenet elrejtésére vagy módosítására, például a kurzor mozgatására és a szöveg törlésére szolgáló escape-sorozatok révén. A színes elemek kiemelésére szolgáló escape-sorozatok támogatása megmarad.
  • A "git checkout -m" parancs most automatikusan elmenti a konfliktusos helyi módosításokat a stash területre anélkül, hogy azonnal meg kellene oldani a konfliktust.
  • A "git push" parancshoz hozzáadva a lehetőséget, hogy egy ágat több külső Git szerverre helyezzen át egyetlen parancsal. Például a main ág átadásához nemcsak a fő szerverre, hanem a tükrözésekre is létrehozhat egy "publish" csoportot a szerverek "github", "gitlab" és "mirror":

    git config remotes.publish "github gitlab mirror"
    git push publish main

  • A „git log —graph” parancshoz hozzáadódott a „—graph-lane-limit=” opció, amely korlátozza a függőleges sávok számát az ágak vizualizálásakor, lehetővé téve, hogy helyet hagyjunk a képernyőn a commit adatoknak olyan repókkal, ahol sok ág található.

    …
    * | | | | 619931f561 Összevonás a 'dl/posix-unused-warning-clang' ággal
    |\ \ \ \ \
    | * | | | ~ cf48887610 compat/posix.h: egyszerűsíti a GIT_GNUC_PREREQ() összehasonlítást
    | * | | | ~ ffd45926dc compat/posix.h: tisztázza a GIT_GNUC_PREREQ() és az UNUSED szempontokat
    |\ \ \ \ \~
    | * | | | ~ 3f5203eeb4 ls-files: szűri a pathspec-et lstat előtt

  • A „git log” és a „git rev-list” parancsokhoz hozzáadódott a „—max-count-oldest=” opció, amely lehetővé teszi a legöregebb N commit kiválasztását a tartományban.

Forrás: opennet.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster