Выпуск системы управления исходными текстами 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, отслеживающий изменения в ФС.

Источник: opennet.ru

Добавить комментарий