Издание на системата за управление на изходния код Git 2.48

Публикувано издание на разпределена система за управление изходния код 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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster