Выпуск системы управления исходными текстами Git 2.39

После двух месяцев разработки опубликован выпуск распределенной системы управления исходными текстами Git 2.39. Git является одной из самых популярных, надёжных и высокопроизводительных систем управления версиями, предоставляющей гибкие средства нелинейной разработки, базирующиеся на ответвлении и слиянии веток. Для обеспечения целостности истории и устойчивости к изменениям «задним числом» используются неявное хеширование всей предыдущей истории в каждом коммите, также возможно удостоверение цифровыми подписями разработчиков отдельных тегов и коммитов.

По сравнению с прошлым выпуском в новую версию принято 483 изменений, подготовленных при участии 86 разработчиков, из которых 31 впервые принял участие в разработке. Основные новшества:

  • В команду «git shortlog», предназначенную для отображения сводок со статистикой из истории изменений, добавлена опция »--group» для произвольной группировки коммитов по полям, не ограничивающимся автором или коммитером. Например, для показа списка разработчиков с информацией о числе изменений, учитывающего помощников, упомянутых в поле «Co-authored-by», можно использовать команду:
       git shortlog -ns --group=author --group=trailer:co-authored-by
    

    Вывод shortlog можно агрегировать при помощи спецификаторов форматирования и опция »--group» позволяет существенно упростить создание сложных отчётов и избавиться от выполнении дополнительных команд сортировки. Например, для создания отчёта с информацией о том, сколько коммитов для заданного релиза было принято в каждом месяце, можно указать:

       git shortlog v2.38.0.. --date='format:%Y-%m' --group='%cd' -s
     
        2  2022-08
        47  2022-09
       405  2022-10
       194  2022-11
         5  2022-12
    
    Раньше для выполнения аналогичной операции потребовалось бы привлечение утилит sort и uniq:
       git log v2.38.0.. --date='format:%Y-%m' --format='%cd' | sort | uniq -c
    
  • Расширены возможности механизма «cruft packs», предназначенного для упаковки недостижимых объектов, на которые в репозитории отсутствуют ссылки (не ссылаются ветки или теги). Недостижимые объекты удаляются сборщиком мусора, но до удаления определённое время остаются в репозитории для исключения состояний гонки. Механизм «cruft packs» позволяет хранить все недостижимые объекты в одном pack-файле, а данные о времени модификации каждого объекта отражать в отдельной таблице, хранимой в отдельном файле с расширением ».mtimes», что бы они не пересекались с общим временем изменения.

    Время нахождения недостижимых объектов в репозитории перед фактическим удалением определяется опцией »--prune=‹date›». При этом несмотря на то, что задержка перед удалением является достаточно эффективным и практичным способом предотвращения повреждения репозитория из-за состояния гонки, он не является на 100% надёжным. Чтобы упростить восстановление повреждённого репозитория в новом выпуске предоставлена возможность сохранения отсутствующих объектов, для чего в команду «git repack» добавлена опция »--expire-to», позволяющая задать файл для создания внешней копии всех удаляемых объектов. Например, для сохранения в файле backup.git недостижимых объектов, которые не менялись последние 5 минут, можно использовать команду:

       git repack --cruft --cruft-expiration=5.minutes.ago -d --expire-to=../backup.git
    
  • Значительно увеличена (до 70%) скорость выполнения операции «git grep --cached» при поиске в областях, в которых применяется частичное клонирование (sparse-checkout) и для которых имеются частичные индексы (sparse index). Ранее при указании опции »--cached» вначале осуществлялся поиск в обычном индексе, а потом в частичных, что приводило к возникновению ощутимых задержек при поиске в больших репозиториях.

  • Ускорено выполнение на сервере проверки связности новых объектов перед их помещением в репозиторий при выполнении операции «git push». За счёт перехода к учёту при проверке только объявленных ссылок, в тестовом репозитории с 7 млн ссылок из которых только 3% охвачены операцией push внесённые оптимизации позволили сократить время проверки в 4.5 раза.
  • Для защиты от потенциальных целочисленных переполнений в коде в команде «git apply» ограничен максимальный размер обрабатываемых патчей. В случае если размер патча превышает 1 ГБ теперь будет выводиться ошибка.

  • Для защиты от потенциальных уязвимостей внесены изменения для чистки лишней информации из заголовков, выставляемых при использовании модуля h2h3 с опцией GIT_TRACE_CURL=1 или GIT_CURL_VERBOSE=1 вместе с HTTP/2.

  • При выполнении операции check out с веткой, которая является символической ссылок на другую ветку, команда «git symbolic-ref HEAD» теперь выводит название целевой ветки, а не имя символической ссылки.

  • Добавлена поддержка аргумента @{-1} в опции »--edit-description» («git branch --edit-description @{-1}») для редактирования описания прошлой ветки.

  • Добавлена команда «git merge-tree --stdin», позволяющая передать список параметров через стандартный входной поток.
  • На сетевых файловых системах по умолчанию отключён обработчик fsmonitor, отслеживающий изменения в ФС.



Источник: http://www.opennet.ru/opennews/art.shtml? num=58318

© OpenNet