Git 2.39 manbalarni boshqarish tizimining chiqarilishi

Ikki oylik rivojlanishdan so'ng Git 2.39 tarqatilgan manbalarni boshqarish tizimi chiqarildi. Git eng mashhur, ishonchli va yuqori unumli versiyalarni boshqarish tizimlaridan biri bo'lib, tarmoqlanish va birlashtirishga asoslangan moslashuvchan chiziqli bo'lmagan rivojlanish vositalarini taqdim etadi. Tarixning yaxlitligini va retroaktiv o'zgarishlarga chidamliligini ta'minlash uchun har bir topshiriqda butun oldingi tarixning yashirin xeshlanishi qo'llaniladi, shuningdek, ishlab chiquvchilarning raqamli imzolari bilan individual teglar va majburiyatlarni tasdiqlash mumkin.

Oldingi versiya bilan taqqoslaganda, yangi versiya 483 ta ishlab chiquvchi ishtirokida tayyorlangan 86 ta o'zgartirishni o'z ichiga olgan, ulardan 31 tasi birinchi marta ishlab chiqishda ishtirok etgan. Asosiy innovatsiyalar:

  • O'zgarishlar tarixidagi statistik ma'lumotlar bilan xulosalarni ko'rsatish uchun mo'ljallangan "git shortlog" buyrug'i muallif yoki topshiruvchi bilan cheklanmagan maydonlar bo'yicha topshiriqlarni o'zboshimchalik bilan guruhlash uchun "-group" variantini qo'shdi. Masalan, "Hammualliflik" maydonida ko'rsatilgan yordamchilarni hisobga olgan holda o'zgarishlar soni haqidagi ma'lumotlar bilan ishlab chiquvchilar ro'yxatini ko'rsatish uchun siz quyidagi buyruqdan foydalanishingiz mumkin: git shortlog -ns --group=author - -guruh=treyler:hammuallif

    Shortlog chiqishi formatlash spetsifikatsiyalari yordamida jamlanishi mumkin va "--group" opsiyasi murakkab hisobotlarni yaratishni sezilarli darajada soddalashtirishi va qo'shimcha saralash buyruqlariga ehtiyojni yo'q qilishi mumkin. Misol uchun, har oyda berilgan reliz uchun qancha topshiriq qabul qilinganligi haqidagi ma'lumot bilan hisobot yaratish uchun quyidagilarni belgilashingiz mumkin: 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 Ilgari shunga o'xshash operatsiyani bajarish uchun sort va uniq utilitalaridan foydalanish kerak edi: git log v2.38.0. .. —date='format:%Y -%m' —format='%cd' | saralash | uniq -c

  • Omborda havola qilinmagan (filiallar yoki teglar tomonidan havola qilinmagan) erishib bo'lmaydigan ob'ektlarni qadoqlash uchun mo'ljallangan "kruft paketlari" mexanizmining imkoniyatlari kengaytirildi. Olib bo'lmaydigan ob'ektlar axlat yig'uvchi tomonidan o'chiriladi, ammo poyga sharoitlarini oldini olish uchun o'chirilishidan oldin ma'lum vaqt omborda qoladi. "Cruft packs" mexanizmi barcha erishib bo'lmaydigan ob'ektlarni bitta to'plam faylida saqlashga va har bir ob'ektni o'zgartirish vaqti haqidagi ma'lumotlarni ".mtimes" kengaytmali alohida faylda saqlanadigan alohida jadvalda ko'rsatishga imkon beradi. umumiy o'zgartirish vaqti bilan bir-biriga mos kelmasligi kerak.

    Olib bo'lmaydigan ob'ektlar haqiqatda o'chirilgunga qadar omborda qoladigan vaqt "—prune =" opsiyasi bilan belgilanadi. " Biroq, o'chirishdan oldin kechiktirish poyga sharoitlari tufayli ombor korruptsiyasining oldini olishning juda samarali va amaliy usuli bo'lsa-da, u 100% ishonchli emas. Shikastlangan omborni qayta tiklashni osonlashtirish uchun yangi versiya “git repack” buyrug'iga “--expire-to” variantini qo'shish orqali etishmayotgan ob'ektlarni saqlash imkoniyatini beradi, bu sizga tashqi fayl yaratish uchun faylni belgilash imkonini beradi. barcha o'chirilgan ob'ektlarning nusxasi. Masalan, backup.git faylida oxirgi 5 daqiqada oʻzgarmagan, erishib boʻlmaydigan obʼyektlarni saqlash uchun quyidagi buyruqdan foydalanishingiz mumkin: git repack --cruft --cruft-expiration=5.minutes.ago -d --expire -to=../backup.git

  • Qisman klonlash (siyrak-checkout) qo'llaniladigan va qisman indekslar (siyrak indeks) mavjud bo'lgan hududlarni qidirishda "git grep -cached" operatsiyasining tezligi sezilarli darajada oshdi (70% gacha). Ilgari, "-keshlangan" variantni belgilashda qidiruv avval oddiy indeksda, so'ngra qisman bo'lganlarida amalga oshirildi, bu esa katta omborlarda qidirishda sezilarli kechikishlarga olib keldi.
  • “git push” operatsiyasi vaqtida yangi obyektlarni omborga joylashtirishdan oldin ularning muvofiqligini server tomonidan tekshirish tezlashtirildi. Tekshirish paytida faqat e'lon qilingan havolalarni hisobga olishga o'tish orqali 7 million havolaga ega bo'lgan sinov omborida, shundan atigi 3 foizi surish operatsiyasi bilan qoplanadi, amalga oshirilgan optimallashtirishlar tekshirish vaqtini 4.5 barobarga qisqartirishga imkon berdi.
  • Koddagi potentsial butun sonlarning to'lib ketishidan himoya qilish uchun "git apply" buyrug'i qayta ishlanishi mumkin bo'lgan yamoqlarning maksimal hajmini cheklaydi. Agar yamoq hajmi 1 GB dan oshsa, xatolik hozir ko'rsatiladi.
  • Potensial zaifliklardan himoyalanish uchun h2h3 modulidan HTTP/1 bilan birgalikda GIT_TRACE_CURL=1 yoki GIT_CURL_VERBOSE=2 opsiyasi bilan foydalanilganda oʻrnatilgan sarlavhalardan keraksiz maʼlumotlarni tozalash uchun oʻzgarishlar kiritildi.
  • Boshqa filialga ramziy havola bo'lgan filialni tekshirishda "git symbolic-ref HEAD" buyrug'i endi simli bog'lanish nomini emas, balki maqsadli filial nomini ko'rsatadi.
  • Oldingi filial tavsifini tahrirlash uchun “--edit-description” (“git branch —edit-description @{-1}”) opsiyasiga @{-1} argumentini qoʻllab-quvvatlash qoʻshildi.
  • Variantlar ro'yxatini standart kiritish orqali o'tkazish uchun "git merge-tree --stdin" buyrug'i qo'shildi.
  • Tarmoq fayl tizimlarida fayl tizimidagi o'zgarishlarni kuzatuvchi fsmonitor ishlov beruvchisi sukut bo'yicha o'chirib qo'yilgan.

Manba: opennet.ru

a Izoh qo'shish