Git 2.55

Представлен izdanje distribuiranog sistema za upravljanje izvornih kodova Git 2.55. Među ključnim promenama: uključivanje podrazumevane izrade sa Rust, implementacija procesa fsmonitor za Linux, nova strategija repakovanja inkrementalnog MIDX indeksa, komanda git history fixup za ispravku commit-a, optimizacija generisanja bitmapa dostupnosti objekata, podrška za paralelno izvršavanje hook-ova, komanda git format-rev. Kod Git se distribuira pod GPLv2+ licencom.

U poređenju sa prethodnim izdanjem, nova verzija uključuje 505 izmena pripremljenih uz učešće 100 developera, od kojih je 33 prvi put učestvovalo u razvoju Gita.

Glavne novine (github.blog, gitlab.com/blog, gitlab.com/git-scm):

  • Privzeto je vključena podrška za komponente napisane u Rust jeziku. Kompajler rustc dodano u broju zavisnosti za izradu. Za izradu bez Rust-a možete koristiti zastavicu NO_RUST=1 prilikom pokretanja alata make ili -Drust=disabled prilikom izvršavanja meson configure. Mogućnost isključivanja izrade sa Rust-om će se podržavati do grane Git 3.0, u kojoj će Rust biti vključen u broju obaveznih zavisnosti. Na jeziku Rust implementirana je slojevita struktura za prenosivost između konfiguracija sa SHA-1 i SHA-256 hešovima, kao i neke unutrašnje funkcije, poput kodiranja i dekodiranja celobrojnih vrednosti promenljive dužine. U budućnosti se očekuje prepravka značajnih unutrašnjih komponenti Gita na Rust.
  • U eksperimentalnu komandu "git history", koja pruža mogućnosti za prepisivanje istorije promena, dodata je operacija „git history fixup“ za ispravku commit-a. Operacija fixup omogućava prenos izmena dodanih putem git add u raniji commit i automatsko prepisivanje svih narednih commit-a, slično izvršavanju komande git commit —fixup=<commit> i pokretanju git rebase —autosquash <commit>~.
  • Za Linux platformu implementiran je pozadinski proces fsmonitor, koji prati promene u datotečnom sistemu korišćenjem mehanizma inotify i omogućava izbegavanje pretrage čitavog radnog direktorijuma prilikom izvršavanja takvih komandi kao što je git status. Aktivacija se vrši putem podešavanja „core.fsmonitor».
  • V ekipi git repack je dodana možnost —write-midx=incremental, ki uvaja novo strategijo posodabljanja metapodatkov v inkrementalnem MIDX indeksu (multi-pack index), ki omogoča izogibanje ponovni pakiranju celotnega indeksa. V inkrementalnem večpaketnem indeksu namesto enega velikega indeksa, ki vsebuje informacije o razporeditvi objektov po pack datotekah, uporabljamo ločevanje na plasti — vsaka plast obsega določeno število pack datotek in se shranjuje v ločeni bitmap datoteki. Takšna struktura omogoča dodajanje podatkov o objektih v nove pack datoteke, pri čemer se dodajo nove plasti v indeks brez ponovne konstrukcije že obstoječih plasti. Komanda git repack —write-midx=incremental omogoča dodajanje nove plasti v inkrementalni MIDX indeks, ki pokriva nedavno ustvarjene pack datoteke. V kombinaciji z načinom pakiranja repozitorijev —geometric nova komanda omogoča združevanje novih objektov iz več pack datotek v en večji pack datotek in po potrebi izvršitev pakiranja ter združevanja več sosednjih plasti inkrementalnega MIDX indeksa. Takšna strategija omogoča, da se pri izvajanju git repack prepisujejo le zgornje plasti, pri čemer ostanejo stari veliki sloji nedotaknjeni, ter se izključuje nekontrolirano širjenje verige plasti, pri čemer se ohranja skupno število plasti na ravni, sorazmerni logaritmu skupnega števila objektov.
  • Znatno je optimizirana generacija bitnih kart dostopnosti objektov z novim algoritmom prehoda po drevesu objektov, ki izključuje nepotrebno rekurzijo, predpomnjenjem položajev objektov, razvrščanjem bitnih kart pred njihovo združitvijo z operacijo XOR in predelavo kode za ustvarjanje bitnih kart psevdospleditev (pseudo-merge). V testnem repozitoriju so optimizacije omogočile skrajšanje časa generacije bitnih kart s 612 na 294 sekund.
  • Uvedena je možnost paralelnega izvajanja neodvisnih hookov v konfiguračních souborech. Paralelně nemohou běžet hooky, které ovlivňují společný stav nebo jej zohledňují, například měnící poznámky k commitům nebo inspekci indexů a pracovního stromu. Je však možné spouštět hooky pro kontrolu linterem a provádění unit testování. Hooky povolující paralelní provedení se nastavují pomocí parametru hook.jméno_huku.parallel = true. Počet současně spouštěných úloh se určuje pomocí nastavení hook.jobs, hook..jobs nebo volby příkazového řádku -j.
  • V týmu git pack-objects —path-walk byla implementována možnost zadávat filtry, jako jsou blob:none, blob:limit=, tree:0, object:type=, sparse: a combine:. Při provedeném testu odstranění blobů během provádění —path-walk umožnilo snížit velikost vytvořeného pack souboru o 16%.
  • Byla přidána příkaz git format-rev pro formátování revizí a jmen objektů, které se zmiňují v seznamech commitů nebo se vyskytují v libovolném textu (například lze použít v hookách pro zpracování poznámek k commitům).

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

Junio C Hamano builtin/commit.c

  • Bylo ve výchozím nastavení povoleno escapování většiny sekvencí řízení terminálu v informačních zprávách a textu chyb předávaných serverem. Při kontaktování škodlivého serveru mohly být takové escape sekvence použity k skrytí nebo modifikaci výstupu, například prostřednictvím escape sekvencí pro posun kurzoru a vymazání textu. Byla zachována podpora escape sekvencí pro zvýraznění prvků barvou.
  • Příkaz git checkout -m nyní automaticky ukládá konfliktní místní změny do stash oblasti, aniž by bylo nutné okamžitě řešit konflikt.
  • Do příkazu git push byla přidána možnost umístit větev na několik externích Git serverů jedním příkazem. Například pro přenos větve main nejen na hlavní server, ale i na zrcadla je možné vytvořit skupinu publish ze serverů github, gitlab a mirror:

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

  • Do příkazu git log —graph byla přidána volba —graph-lane-limit= pro omezení počtu vertikálních pruhů při vizualizaci větví, což umožňuje ponechat místo na obrazovce pro údaje o commitech v repozitářích s velkým počtem větví.

…
* | | | | 619931f561 Merge branch ‘dl/posix-unused-warning-clang’
|\ \ \ \ \
| * | | | ~ cf48887610 compat/posix.h: poenostaviti primerjavo GIT_GNUC_PREREQ()
| * | | | ~ ffd45926dc compat/posix.h: očistiti GIT_GNUC_PREREQ() in UNUSED
|\ \ \ \ \~
| * | | | ~ 3f5203eeb4 ls-files: filtrirati pathspec pred lstat

  • V ukaza git log in git rev-list je bila dodana možnost —max-count-oldest=, ki omogoča izbiro N najstarejših commitov v razponu.

Izvor: linux.org.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster