Git 2.41 mənbə idarəetmə sistemi mövcuddur

Üç aylıq inkişafdan sonra, paylanmış mənbə idarəetmə sisteminin Git 2.41 buraxılışı nəşr olundu. Git, budaqlanan və birləşməyə əsaslanan çevik qeyri-xətti inkişaf vasitələrini təmin edən ən populyar, etibarlı və yüksək performanslı versiyaya nəzarət sistemlərindən biridir. Tarixin bütövlüyünü və dəyişikliklərə qarşı müqaviməti təmin etmək üçün "backdating", hər bir öhdəçilikdə bütün əvvəlki tarixin gizli heşinqindən istifadə olunur, həmçinin fərdi teq və öhdəlikləri tərtibatçıların rəqəmsal imzaları ilə yoxlamaq mümkündür.

Əvvəlki buraxılışla müqayisədə 542 tərtibatçının iştirakı ilə hazırlanan yeni versiyaya 95 dəyişiklik qəbul edilib, onlardan 29-u ilk dəfə işlənmədə iştirak edib. Əsas yeniliklər:

  • Repozitoriyada istinad edilməyən əlçatmaz obyektlərin təkmilləşdirilmiş idarə edilməsi (filiallara və ya etiketlərə istinad edilmir). Əlçatmaz obyektlər zibil yığan tərəfindən çıxarılır, lakin yarış şəraitindən qaçmaq üçün çıxarılmazdan əvvəl müəyyən müddət anbarda qalır. Əlçatmaz obyektlərin dövrünü izləmək üçün etiketləri oxşar obyektlərin dəyişmə vaxtı ilə bağlamaq lazımdır ki, bu da onları bütün obyektlərin ümumi dəyişmə vaxtına malik olduğu bir paket-faylda saxlamağa imkan vermir. Əvvəllər hər bir əlçatmaz obyekt ayrıca faylda saxlanılırdı və bu, hələ silinməyə məruz qalmayan çoxlu sayda təzə əlçatmaz obyektlər olduqda problemlərə səbəb olurdu. Yeni buraxılışda, standart olaraq, əlçatmaz obyektləri qablaşdırmaq üçün "cruft packs" mexanizmi istifadə olunur ki, bu da bütün əlçatmaz obyektləri bir paket faylında saxlamağa və hər bir obyektin modifikasiya müddəti haqqında məlumatları bir paketdə saxlanılan ayrıca cədvəldə əks etdirməyə imkan verir. “.mtimes” uzantılı və “.idx” uzantılı indeks faylı ilə əlaqələndirilmiş fayl.
    Git 2.41 mənbə idarəetmə sistemi mövcuddur
  • Defolt olaraq, paket faylları üçün diskdə əks indeksin (revindex) saxlanması aktivdir. Torvalds/linux repozitoriyalarında sınaqdan keçirildikdə, əks indeksdən istifadə bizə resurs tutumlu "git push" əməliyyatlarını 1.49 dəfə sürətləndirməyə və "git cat-" istifadə edərək tək obyektin ölçüsünü hesablamaq kimi sadə əməliyyatları sürətləndirməyə imkan verdi. fayl --batch='%(objectsize:disk)' » 77 dəfə. Əks indeksli fayllar (".rev") ".git/objects/pack" qovluğunda deponun daxilində saxlanılacaq.

    Xatırladaq ki, Git bütün məlumatları ayrı-ayrı fayllarda yerləşdirilən obyektlər şəklində saxlayır. Repozitoriya ilə işləməyin səmərəliliyini artırmaq üçün obyektlər əlavə olaraq paket fayllarına yerləşdirilir, burada məlumatlar bir-birinin ardınca gələn obyektlər axını şəklində təqdim olunur (oxşar format git fetch və git ilə obyektləri köçürərkən istifadə olunur. təkan əmrləri). Hər bir paket faylı üçün indeks faylı (.idx) yaradılır ki, bu da verilmiş obyektin obyekt identifikatoru tərəfindən saxlandığı paket faylında ofseti çox tez müəyyən etməyə imkan verir.

    Yeni buraxılışa daxil edilmiş əks indeks paket faylında obyektin yeri haqqında məlumatdan obyekt identifikatorunun müəyyən edilməsi prosesini sadələşdirməyə yönəlib. Əvvəllər belə konvertasiya paket faylının təhlili zamanı tez həyata keçirilirdi və yalnız yaddaşda saxlanılırdı ki, bu da belə indekslərin təkrar istifadəsinə imkan vermirdi və indeksi hər dəfə generasiya etməyə məcbur edirdi. İndeksin qurulması əməliyyatı obyekt-mövqe cütləri massivinin qurulmasına və onun mövqeyə görə çeşidlənməsinə qədər azaldılır ki, bu da böyük paket faylları üçün uzun müddət çəkə bilər.

    Məsələn, birbaşa indeksdən istifadə edən obyektlərin məzmununun göstərilməsi əməliyyatı obyektlərin ölçülərinin göstərilməsi əməliyyatından 62 dəfə sürətli olub, bunun üçün mövqe-obyekt əlaqəsi məlumatları indeksləşdirilməyib. Əks indeksdən istifadə etdikdən sonra bu əməliyyatlar təxminən eyni vaxt aparmağa başladı. Əks indekslər həm də diskdən hazır məlumatları birbaşa ötürməklə gətirmə və təkan əmrlərini yerinə yetirərkən obyektlərin göndərilməsi işini sürətləndirməyə imkan verir.

    Git 2.41 mənbə idarəetmə sistemi mövcuddur

  • Məhdud depolara daxil olarkən etimadnamələri ötürmək üçün istifadə edilən "etimadnamə köməkçisi" protokoluna etimadnamə işləyicisi və autentifikasiya xidməti arasında WWW-Authenticate başlıqlarını ötürmək üçün əlavə dəstək. WWW-Authenticate başlığına dəstək OAuth əhatə dairəsi parametrlərini istifadəçinin repozitoriyalara girişini daha ətraflı şəkildə ayırmağa və sorğular üçün mövcud əhatə dairələrini məhdudlaşdırmağa imkan verir.
  • Format seçimi əlavə edildi "%(qabaqda-arxada: )", digər filiala nisbətən müəyyən filialda mövcud və ya olmayan öhdəliklərin sayı haqqında dərhal məlumat almağa imkan verir (bir filialın öhdəliklər səviyyəsində digərindən nə qədər geridə və ya qabaqda olması). Əvvəllər bu məlumatı əldə etmək üçün iki ayrı əmr tələb olunurdu: "git rev-list --count main..my-feature" filiala xas öhdəliyin sayını almaq üçün və "git rev-list --count my-feature.." itkin öhdəliyin sayını almaq üçün əsas". İndi belə hesablamalar bir təlimata qədər azaldıla bilər ki, bu da yazı işləyicilərini asanlaşdırır və icra müddətini azaldır. Məsələn, birləşdirilməmiş budaqları göstərmək və onların əsas filialının arxasında və ya qabaqda olub-olmadığını qiymətləndirmək üçün bir laynerdən istifadə edə bilərsiniz: $ git for-each-ref --no-merged=origin/HEAD \ --format=' %(refname:qısa) %(qabaqda arxada :origin/HEAD)' \ refs/heads/tb/ | sütun -t tb/cruft-extra-tips 2 96 tb/for-each-ref—16 96 tb/roaring-bitmapları xaric edin 47 3 əvvəllər istifadə olunmuş skript əvəzinə, bu 17 dəfə yavaşdır: $git for-each-ref - format='%(refname:qısa)' --no-merged=origin/HEAD \ refs/heads/tb | ref oxuyarkən ahead="$(git rev-list --count origin/HEAD..$ref)" arxasında="$(git rev-list --count $ref..origin/HEAD)" printf "%s %d %d\n" "$ref" "$qabaqda" "$arxada" tamamlandı | sütun -t tb/cruft-extra-tips 2 96 tb/hər-ref üçün—16 96 tb/roaring-bitmapları xaric edin 47 3
  • "git fetch" əmrinə "--porcelain" seçimi əlavə edildi, hansı ki, "formatında çıxış yaradır" ”, daha az oxunaqlıdır, lakin skriptlərdə təhlil etmək üçün daha əlverişlidir.
  • Serverin obyektlərin tam dəstini göndərdiyini yoxlama mərhələsində yerli repozitoriyada keçidlərin bir hissəsini gizlətməklə "git fetch" əməliyyatlarını sürətləndirmək üçün "fetch.hideRefs" parametri əlavə edildi, bu da çeki yalnız serverlərə məhdudlaşdırmaqla vaxta qənaət edir. məlumatların birbaşa əldə edildiyi. Məsələn, çox sayda izlənilən xarici keçidləri ehtiva edən depoları olan sistemdə sınaqdan keçirilərkən, $remote hədəf serverinə ünvanlananlar istisna olmaqla, bütün keçidlər istisna olmaqla, "git fetch" əməliyyatını 20 dəqiqədən 30 saniyəyə endirdi. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ gətirmək $uzaqdan
  • "git fsck" əmri əlçatanlıq bitmaplarında və əks indekslərdə korrupsiya, yoxlama məbləğinin uyğunluğu və dəyərlərin düzgünlüyünü yoxlamaq qabiliyyətini həyata keçirir.
  • İndi "git clone --local" əmri $GIT_DIR daxilində simvolik keçidləri ehtiva edən depodan köçürməyə cəhd edərkən xəta göstərir.

Mənbə: opennet.ru

Добавить комментарий