Git 2.56, tarqatilgan manba kodini boshqarish tizimi, chiqarildi. Git GPLv2+ litsenziyasi ostida litsenziyalangan. Avvalgi versiya bilan taqqoslaganda, yangi versiyada 104 ta ishlab chiquvchi tomonidan tayyorlangan 748 ta o'zgartirish mavjud, ulardan 39 tasi Git ishlab chiqishda yangi. Asosiy yangi xususiyatlar (1, 2, 3):
- Filiallarni birlashtirishda nizolarni hal qilish uchun "git add --resolved" rejimi qo'shildi. Ushbu rejim fayllarni nizo belgilari uchun tekshiradi va agar marker kamida bitta faylda aniqlansa, xato qaytaradi, hech qanday fayllarni indekslamaydi va tuzatishni talab qiladigan fayllar ro'yxatini ko'rsatadi. "git add --update" buyrug'idan farqli o'laroq, bu yangi rejim faqat nizo holatidagi fayllarni qayta ishlaydi va nizoga aloqador bo'lmagan o'zgartirilgan fayllarni e'tiborsiz qoldiradi. Bu ishchi katalogda boshqa tugallanmagan tahrirlar bo'lsa ham ("git add --update" buyrug'i ishchi katalogdagi ilgari kuzatilgan barcha o'zgartirilgan fayllarni indeksga qo'shdi), filiallarni birlashtirishni xavfsiz bajarishga imkon beradi.
- Filiallarni birlashtirish va kommitlarni taqqoslashda eng so'nggi keng tarqalgan kommitlarni qidirish algoritmini optimallashtirish orqali katta omborlar bilan ishlash sezilarli darajada tezlashdi. Jarayon endi faqat bitta filialga tegishli kommitlarni ko'rib chiqadi, bu esa barcha mumkin bo'lgan umumiy ajdodlarni topgandan so'ng skanerlashni darhol to'xtatishga imkon beradi, bu esa o'zgarishlar tarixini yanada ko'rib chiqishga vaqt sarflamasdan amalga oshiriladi. Sinovdan o'tgan bitta omborda qidiruv tezligi o'rtacha 20 baravar oshdi, boshqasida esa tezlik 70 baravarga yetdi. Yadro bilan omborda "git merge-base --all v4.8 v4.9" buyrug'ini ishga tushirganda Linux O'tish bosqichlari soni 167 mingdan 3.8 minggacha kamaydi.
- "--path-walk" qayta qadoqlash rejimi server foydalanishi uchun moslashtirildi, bu esa obyektlarni katalog daraxtidagi yo'llari bo'yicha guruhlash orqali yanada ixcham paket fayllarini yaratish imkonini berdi (masalan, Fluent UI ombori uchun "--path-walk" dan foydalanish paket fayl hajmini 558 MB dan 164 MB gacha kamaytirdi). Yangi versiya "--path-walk" rejimidan Git xosting xizmatlari tomonidan ishni tezlashtirish va asosiy ombordan vilkalarni ajratish uchun ishlatiladigan kirish mumkin bo'lgan bitmaplar va delta orollari bilan birgalikda foydalanishni qo'llab-quvvatlaydi.
- Katta omborlarda ortiqcha hisob-kitoblarga olib kelgan to'siqlar bartaraf etildi: qayta tiklanadigan faylga yozishda keraksiz fayl holatini tekshirishlar olib tashlandi; har bir yangi paket fayli qo'shilishi uchun ro'yxatni qayta skanerlash olib tashlandi; to'plangan katta o'chirish yozuvlari bilan qayta tiklanadigan operatsiyalar tezlashtirildi; fayl yo'li cheklovlarini belgilashda git diff ishlashi optimallashtirildi. Ushbu optimallashtirishlardan so'ng, ko'p sonli o'chirishlar bilan qayta tiklanadigan operatsiyalar 65 marta tezlashtirildi (13 soniyadan 0.2 soniyagacha) va indeksda 500 000 ta elementga ega Chromium omboridagi muammoli git diff buyrug'i endi 8 daqiqa o'rniga 0.07 soniyani oladi.
- O'zgarishlar tarixini qayta yozish imkoniyatini beruvchi eksperimental "git history" buyrug'i tanlangan commitni olib tashlash va uning avlodlarini ota-kommitga avtomatik ravishda biriktirish uchun "git history drop" operatsiyasini o'z ichiga olgan holda yangilandi.
- O'zgarishlari allaqachon tashqi omborga o'tkazilgan mahalliy filiallar guruhlarini xavfsiz o'chirish uchun "git branch --delete-merged 'origin/*' 'topic-*'" buyrug'i qo'shildi. Filiallar va omborlarni filtrlash uchun joker belgilardan foydalanish mumkin. "--dry-run" bayrog'i amalda bajarmasdan o'chirish uchun nomzodlarni tahlil qilish uchun ishlatilishi mumkin.
- "git refs create|update|delete|rename" buyrug'i qo'shildi, bu esa havolalarni yaratish, o'chirish, qayta nomlash va yangilash uchun past darajadagi operatsiyalarni birlashtiradi.
- "git bisect run" buyrug'i endi "--reset-when-found=[" parametriga ega. ]", bu esa qidiruv boshlanishidan oldingi holatga omborni avtomatik ravishda qaytaradi yoki "git bisect reset" buyrug'ini alohida ishga tushirmasdan muammoli commitni faol qoldiradi.
- 'git replay' buyrug'i endi ishchi daraxtga kirishsiz, 'git rebase --no-rebase-merges' ga o'xshash, tekis birlashtirish topologiyasidan foydalanish uchun '--linearize' bayrog'iga ega.
- "git log --follow" buyrug'i endi chiziqli bo'lmagan kompilyatsiya tarixlarida, masalan, kichik tarmoqlarni birlashtirishda fayl nomlarini kuzatib boradi. Fayl yo'li endi har bir ota-ona kompilyatsiyasi uchun alohida qayd etiladi, bu esa natijani kompilyatsiya tarixining o'tish tartibidan mustaqil qiladi.
- Joriy indeksda ishlatilmaydigan tashqi ombordan talab bo'yicha yuklab olingan katta bloblarni olib tashlash uchun "git repack -a --filter=blob:limit=1m --drop-filtered" buyrug'idan foydalanish imkoniyati qo'shildi. Ushbu obyektlarga kelajakda kirishda avtomatik ravishda qayta yuklab olinadi.
- Bir nechta mustaqil ildizlarga ega grafiklar uchun "git log --graph" buyrug'i endi bog'liq bo'lmagan topshiriqlarni aniq ajratish uchun indentatsiya qo'shadi.
- "git push origin main" o'rniga "git push origin/main" yoki "git branch --set-upstream-to=origin/main" o'rniga "git branch --set-upstream-to origin main" ni belgilash kabi keng tarqalgan xatolar endi aniqlandi va to'g'ri variantdan qanday foydalanish haqida ko'rsatma ko'rsatiladi.
Manba: opennet.ru
