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

Материал из Викиновостей, свободного источника новостей
Перейти к навигации Перейти к поиску

13 декабря 2022 года

Скриншот системы управления версиями.

После двух месяцев разработки опубликован выпуск распределенной системы управления исходными текстами 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. Раньше для выполнения аналогичной операции потребовалось бы привлечение утилит 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 logo.png
Creative Commons
Эта статья содержит материалы из статьи «Выпуск системы управления исходными текстами Git 2.39», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.

Комментарии[править]

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.