Публикувано е издание на разпределената система за управление на оригинални текстове 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-файл. В много големи репозитории реализираният вид индекси дава възможност с течение на времето да се добавят нови битови карти за наличността на обекти бързо и ефективно.
- Старият движок за изпълнение на операции сливане «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
