Публикувана версия на дистрибутираната система за управление на изходния код Git 2.48. Git се отличава с висока производителност и предлага средства за нелинейно разработване, базирани на разклоняване и сглобяване на клонове. За осигуряване на целостта на историята и устойчивостта на промените „задназад“ се използва неявно хеширане на цялата предходна история във всеки комит, както и удостоверяване чрез цифрови подписи на разработчиците за отделни тагове и комити. Кодът на Git е разпространен под лиценза GPLv2+.
В сравнение с предишното издание, новата версия приема 605 изменения, подготвени с участието на 93 разработчици, от които 35 участват за първи път в разработката. Основните нововъведения са:
- Реализирана е възможността за изграждане с помощта на системата за изграждане Meson, в допълнение към GNU Make и CMake. За изграждане на Git сега може да се използва командата „meson setup build && ninja -C build“. Забелязва се, че Makefile, който се използва с GNU Make, е нараснал до 3887 реда и не е толкова прост, колкото бихме искали. Инструментариумът Meson опростява работата с системата за изграждане, удобен е за кросплатформени изграждания и прави процеса по-достъпен за начинаещи или разработчици, които нямат опит с утилитата Make. Поддръжката на Make и CMake няма да бъде прекратена в обозримо бъдеще.
- Добавени са опции за компилация, позволяващи използването на алтернативни реализации на хеш SHA-1 при изчисляването на контролни суми, използвани за проверка на целостта на блоковете данни в pack-файлове. Производителността на изчисляването на контролни суми е от голямо значение, например, за изчисляването им при клониране на репозитория с ядрото на Linux се изразходва около 78% от процесорното време. Използваната по подразбиране реализация включва допълнителни проверки за колизии и защита от атаки на SHA-1, като SHAttered и Shambles. Подобна защита, потребяваща допълнителни ресурси, има смисъл само при използване на SHA-1 за криптографски цели и е безполезна при проверка на целостта на индексни данни.
За изграждане на Git с по-бърза реализация на SHA-1, неподходяща за криптосистеми, е предложен набор от опции *_UNSAFE, например „OPENSSL_SHA1_UNSAFE“. В GitHub, изграждането с опростен SHA-1 е позволило увеличение на производителността на операциите по извличане и клониране на данни с 10-13%.
- Добавена е възможността да се използва в командата „range-diff“ опцията „—remerge-diff“, позволяваща показване на разликите между общия резултат от сливането и фактическите данни, отразени в комита след обработката на командата „merge“. При използване на опцията „—remerge-diff“, разликите между разрешенията на конфликтите не се разделят за всеки родителски клон, а се показват общи разлики между файла с конфликтите от сливането и файла, в който конфликтите са разрешени. В контекста на командата „range-diff“, новата опция може да бъде полезна за сравнение на набори от комити след преноса на последователността на комитите с командата „rebase“ с опция „—rebase-merges“.
- Добавена е възможността за стартиране на тестов набор Git с активен режим за откриване на утечки на памет. Тъй като git предоставя утилити, които приключват работа след изпълнение на извиканата функция, утечките на памет по-рано не се разглеждаха като голям проблем. Необходимостта от пълно отстраняване на утечките на памет стана актуална след началото на работата върху изнасянето на вътрешната функционалност в отделна библиотека, която може да се използва в дългосрочно работещи процеси.
- Започна формирането на списък с остарели режими и възможности, чиято поддръжка планират да прекратят в бъдеще. Предполага се, че премахването на остарялата функционалност ще стане в изданието Git 3.0, в което ще бъдат включени промени, нарушаващи обратната съвместимост.
- Оптимизация на работата на екипа „git for-each-ref“, който извежда списък с референции в хранилището, бе продължена. Оптимизацията, която обединява обработчиците за филтриране на референтите и форматиране на изхода, вече се прилага не само за несортиран изход, но и при задаване на опцията „—sort“.
- Подобрена е реализацията на бекенда „reftable“ с блочно хранилище за ефективно съхранение на референции на клонове и тагове в хранилището. Reftable позволява значително да се ускори търсенето, четенето и записването в хранилища с много референции. В новата версия е преустановено извикването на някои спомагателни API, за да се изключи библиотеката libgit от сборните зависимости. Реализирана е адаптивна обработка на грешки, върнати от функции за разпределение на паметта (недостигът на памет вече не води до аварийно приключване). Ускорени са операциите за създаване на референции и е намалено потреблението на памет.
- В реализацията на частично клониране са решени проблемите, които водеха до зацикляне и повреда на хранилището след изпълнението на командата „git gc“.
- При изпълнение на командата „git fetch “, в случай че на локалната система липсва „refs/remotes//HEAD“ и на друга страна има клон, на който сочи HEAD, „refs/remotes//HEAD“ сега се пренасочва към този клон. За управление на синхронизацията на „refs/remotes//HEAD“ със стойността на HEAD от другата страна на връзката, е добавена настройка remote..followRemoteHEAD.
- Добавена е настройка „remote..serverOption“, аналогична на опцията в командния ред „—serverOption=“.
- В командата „git rebase —rebase-merges“ по възможност се осигурява използването на имена на клонове като етикети.
- В командите ‘git notes add’ и ‘git notes append’ е добавен флаг ‘-e’, който отваря бележка в външния текстов редактор, зададен чрез променливата на средата GIT_EDITOR.
- Подобрена е съвместимостта с GCC 15 и стандарта C23.
- Поддръжката на стари версии на libcURL и Perl е прекратена.
Източник: opennet.ru
