Публикувана е версия на разпределената система за управление на изходни текстове Git 2.50. Git предлага висока производителност и осигурява средства за нелинейна разработка, основана на разклоняване и сливане на клонове. За да се гарантира целостта на историята и устойчивостта на промените „задната дата“, се използва неявно хеширане на цялата предишна история в всеки commit, както и удостоверяване с цифрови подписи на разработчиците за отделни тагове и commits. Кодът на Git се разпространява под лицензия GPLv2+.
В сравнение с предишното издание, в новата версия са включени 621 изменения, подготвени с участието на 98 разработчици, от които 35 участват за първи път в разработката. Основни новини:
- Разширена е възможността за разделяне на няколко pack-файла на базата на недостижими обекти („cruft packs“), към които в репозитория отсъстват връзки (не са свързани клонове или тагове). Използването на няколко малки pack-файла вместо един голям позволява значително да се съкратят операции по ввод/извод при преопаковане на репозитории с голям брой недостижими обекти, тъй като за всяка операция по преопаковане не е нужно да се презаписват всички данни.
В новата версия е предложена опция „—combine-cruft-below-size“, с помощта на която може да се организира обединяване на съществуващите pack-файлове, размерът на които не надвишава зададената стойност. За разлика от предишната налична опция „—max-cruft-size“, новата опция „—combine-cruft-below-size“ не ограничава максималния размер на резултата pack-файл, което позволява по-ефективно обединяване на pack-файлове в репозитории с голям брой недостижими обекти, разпръснати на няколко pack-файла.
- Добавена е експериментална поддръжка за инкрементално обновление на многопакетни индекси MIDX (multi-pack index), при което всеки слой на MIDX-индекса с информация за наличността на обекти се съхранява в отделен bitmap-файл. В много големи репозитории реализираният вид индекси осигурява възможност за бързо и ефективно добавяне на нови битови карти за наличността на обекти при постъпване на нови commits.
- От кодовата база е премахнат старият механизъм за изпълнение на сливане на операции «recursive», който е заменен с изцяло преработен механизъм «ORT» (Ostensibly Recursive’s Twin), по-производителен, функционален и удобен за поддръжка. ORT позволява да се определи възможността за обединяване на два обекта, без да се създават нови обекти в репозитория (при стария механизъм беше необходимо изпълнението на командата «git merge-tree —write-tree», записваща нови обекти в репозитория). В Git 2.50 в командата merge-tree е реализирана опция «—quiet», при която възможността за обединение може да се провери на основа на код на върнатата стойност без запис на данни в репозитория.
- В «git cat-file —batch» и подобни команди е добавена опция «—filter», позволяваща да се пропуснат някои обекти при изпълнението на операцията. git cat-file —batch-check=’%(objectname)’ —filter=’object:type=tree’
- В командата «git maintenance» са реализирани три нови действия: worktree-prune, rerere-gc и reflog-expire. Действието worktree-prune е предназначено за премахване на остарели или повредени работни дървета (worktrees) в репозитория. Действието rerere-gc премахва старите записи, останали след разрешаване на конфликти при сливане. Действието reflog-expire премахва остарели недостъпни обекти от reflog.
- Добавена е команда «git reflog drop», която премахва всички данни от reflog за указаната клонка.
- Извършена е оптимизация на обработката и използването на референции, например, реализирано е кеширане на префикси на референции, премахнати са излишни проверки при изпълнението на командата «git update-ref», повишена е ефективността на търсенето на съществуващи итератори на референции.
- За библиотеката cURL са добавени настройки KeepAlive: http.keepAliveIdle, http.keepAliveInterval и http.keepAliveCount.
- В командата «git rev-list» е реализирана възможност за извеждане във формат, удобен за машинно разбиране, при който всяко поле е разделено със символ NUL.
- Езикът Perl е изключен от зависимостите, необходими за инструментите за работа с документация и изпълнение на тестовия набор («make test»). Много Perl-едноредовци в тестовете са заменени с функции на shell или преопределени на езика C.
- Добавен е userdiff-преработвател за формата на конфигурационни файлове «.ini».
- В командата send-email е подобрена поддръжката на SMTP сървера Outlook.
Източник: opennet.ru
