[ON] Выпуск Git 2.55 c включением по умолчанию поддержки Rust

Обсуждение новостей, соответствующих тематике форума

Модератор: Модераторы разделов

Аватара пользователя
rssbot
Бот
Сообщения: 6000
ОС: gnu/linux

[ON] Выпуск Git 2.55 c включением по умолчанию поддержки Rust

Сообщение rssbot »

Представлен релиз распределенной системы управления исходными текстами Git 2.55. Среди ключевых изменений: включение по умолчанию сборки с Rust, реализация для Linux процесса fsmonitor, новая стратегия переупаковки инкрементального MIDX-индекса, команда "git history fixup" для исправления коммита, оптимизация генерации битовых карт доступности объектов, поддержка параллельного выполнения hook-ов, команда "git format-rev". Код Git распространяется под лицензией GPLv2+.


По сравнению с прошлым выпуском в новую версию принято 505 изменений, подготовленных при участии 100 разработчиков, 33 из которых впервые приняли участие в разработке Git. Основные новшества (1, 2, 3):
  • По умолчанию включена поддержка компонентов на языке Rust. Компилятор rustc
    добавлен в число сборочных зависимостей. Для сборки без Rust можно использовать флаг "NO_RUST=1" при запуске утилиты make или "-Drust=disabled" при выполнении "meson configure". Возможность отключения сборки с Rust будет поддерживаться до ветки Git 3.0, в которой Rust будет включён в число обязательных зависимостей. На языке Rust реализована прослойка для переносимости между конфигурациями с хэшами SHA-1 и SHA-256, а также некоторые внутренние функции, такие как кодирование и декодирование целочисленных значений переменной длины. В будущем ожидается переработка на Rust более значительных внутренних компонентов Git.
  • В экспериментальную команду "git history", предоставляющую возможности для перезаписи истории изменений, добавлена операция "git history fixup" для исправления коммита. Операция "fixup" позволяет перенести изменения, добавленные через "git add", в более ранний коммит и автоматически переписать все последующие коммиты по аналогии с выполнением команды "git commit --fixup=‹commit›" и запуска "git rebase --autosquash ‹commit›~".
  • Для платформы Linux реализован фоновый процесс fsmonitor, отслеживающий изменения в файловой системе при помощи механизма inotify и позволяющий обойтись без перебора всего рабочего каталога при выполнении таких команд, как "git status" Включение осуществляется через настройку "core.fsmonitor".
  • В команду "git repack" добавлен режим "--write-midx=incremental", реализующий новую стратегию обновления метаданных в инкрементальном MIDX-индексе (multi-pack index), позволяющую обойтись без переупаковки всего индекса. В инкрементальном многопакетном индексе вместо одного большого индекса, содержащего информацию о распределении объектов по pack-файлам, применяется разделение на слои - каждый слой охватывает определённое число pack-файлов и хранится в отдельном bitmap-файле. Подобная структура позволяет добавлять в индекс данные об объектах в новых pack-файлах, прикрепляя к индексу новые слои без перестроения уже имеющихся слоёв.


    Команда "git repack --write-midx=incremental" позволяет добавить в инкрементальный MIDX-индекс новый слой, охватывающий недавно созданные pack-файлы. В сочетании с режимом упаковки репозиториев "--geometric" новая команда даёт возможность объединить новые объекты из нескольких pack-файлов в один более крупный pack-файл и при необходимости осуществить упаковку и слияние нескольких соседних слоёв инкрементального MIDX-индекса. Подобная стратегия позволяет при выполнении "git repack" переписывать только верхние слои, оставляя старые большие слои нетронутыми, а также исключить неконтролируемое разрастание цепочки слоёв, поддерживая общее число слоёв на уровне, пропорциональном логарифму от общего числа объектов.
  • Значительно оптимизирована генерация битовых карт доступности объектов за счёт нового алгоритма обхода дерева объектов, исключающего лишнюю рекурсию, кэширования позиций объектов, сортировки битовых карт до их объединения операцией XOR и переработки кода для создания битовых карт псевдослияния (pseudo-merge). В тестовом репозитории оптимизации позволили сократить время генерации битовых карт с 612 до 294 секунд.
  • Реализована возможность параллельного выполнения независимых hook-ов в файлах конфигурации. Параллельно не могут запускаться hook-и, влияющие на совместное состояние или учитывающие его, например, меняющие примечания к коммитам или инспектирующие индексы и рабочее дерево. При этом можно параллельно запускать hook-и для проверки линтером и выполнения unit-тестирования. Допускающие параллельное выполнение hook-и настраиваются через параметр "hook.имя_хука.parallel = true". Число одновременно запускаемых работ определяется через настройку hook.jobs, hook.‹event›.jobs или опцию командной строки "-j".
  • В команде "git pack-objects --path-walk" реализована возможность указания фильтров, таких как "blob:none", "blob:limit=‹n›", "tree:0", "object:type=‹type›", "sparse:‹oid›" и "combine:". В проведённом тесте отбрасывание блобов при выполнении "--path-walk" позволило на 16% сократить размер сформированного pack-файла.
  • Добавлена команда "git format-rev" для форматирования ревизий и имён объектов, упоминаемых в списках коммитов или встречающихся в произвольном тексте (например, можно использовать в хукак для обработки примечаний к коммитам).

    Код:

    git last-modified | git format-rev --stdin-mode=text --format=%an

    Junio C Hamano builtin/commit.c
  • Включено по умолчанию экранирование большинства последовательностей управления терминалом в информационных сообщениях и тексте ошибок, передаваемых сервером. При обращении к вредоносному серверу подобные escape-последовательности могли использоваться для скрытия или модификации вывода, например, через escape-последовательности для перемещения курсора и очистки текста. Оставлена поддержка escape-последовательностей для выделения элементов цветом.
  • Команда "git checkout -m теперь автоматически сохраняет конфликтующие локальные изменения в stash-области без необходимости незамедлительно разрешать конфликт.
  • В команду "git push" добавлена возможность помещения ветки на несколько внешних Git-серверов одной командой. Например, для передачи ветки main не только на основной сервер, но и на зеркала можно создать группу "publish" из серверов "github", "gitlab" и "mirror":

    Код:

    git config remotes.publish "github gitlab mirror"
    git push publish main
  • В команду "git log --graph" добавлена опция "--graph-lane-limit=‹N›" для ограничения числа вертикальных полос при визуализации веток, что позволяет оставить место на экране под данные о коммитах в репозиториях с большим числом веток.

    Код:

    ...
    * | | | | 619931f561 Merge branch 'dl/posix-unused-warning-clang'
    |\ \ \ \ \
    | * | | | ~ cf48887610 compat/posix.h: simplify GIT_GNUC_PREREQ() comparison
    | * | | | ~ ffd45926dc compat/posix.h: clean up GIT_GNUC_PREREQ() and UNUSED
    |\ \ \ \ \~
    | * | | | ~ 3f5203eeb4 ls-files: filter pathspec before lstat
  • В команды "git log" и "git rev-list" добавлена опция "--max-count-oldest=‹N›, позволяющая выбрать N самых старых коммитов в диапазоне.


Источник: https://www.opennet.ru/opennews/art.shtml?num=65808
(opennet.ru, основная лента)
Последний раз редактировалось rssbot 30.06.2026 21:08, всего редактировалось 1 раз.
Причина: Updated upstream
Спасибо сказали: