
Состоялся релиз распределенной системы контроля версий Git 2.55. Обновление включает множество улучшений: от интеграции Rust в процесс сборки до внедрения фонового мониторинга файловой системы в Linux и оптимизации работы с индексами.
В текущую версию вошло 505 правок, подготовленных при участии 100 разработчиков, причем 33 из них внесли свой вклад в проект впервые. Код распространяется под лицензией GPLv2+.
Ключевые нововведения
- Интеграция Rust: Поддержка компонентов на языке Rust теперь включена по умолчанию, а компилятор
rustcстал обязательной сборочной зависимостью. Для тех, кому необходимо собрать Git без Rust, предусмотрены флагиNO_RUST=1(дляmake) или-Drust=disabled(дляmeson). Использование Rust пока опционально до выхода версии 3.0, где он станет обязательным. На новом языке уже реализованы прослойка для переносимости между хэшами SHA-1 и SHA-256, а также функции обработки целочисленных значений переменной длины. - Команда git history fixup: В экспериментальный инструментарий
git historyдобавлена операцияfixup. Она позволяет автоматически переносить изменения из текущего индекса в нужный коммит и переписывать историю, заменяя ручной запускgit commit --fixupи последующийgit rebase --autosquash. - Fsmonitor для Linux: Появился фоновый процесс fsmonitor, который использует механизм
inotifyдля отслеживания изменений в файловой системе. Это избавляет от необходимости полного сканирования рабочего каталога при выполнении команд вродеgit status. Активируется настройкойcore.fsmonitor. - Инкрементальные MIDX-индексы: Команда
git repackполучила режим--write-midx=incremental. Он позволяет обновлять метаданные без перестроения всего индекса целиком, работая со слоями (bitmap-файлами). Это предотвращает разрастание индексов и ускоряет упаковку репозитория. - Оптимизация битовых карт: Значительно ускорена генерация битовых карт доступности объектов благодаря переработке алгоритмов обхода дерева и сортировки данных. В тестовых сценариях это сократило время генерации с 612 до 294 секунд.
- Параллельные хуки: Теперь можно настроить одновременное выполнение независимых хуков (например, линтеров или юнит-тестов) через параметры
hook.имя_хука.parallel = trueиhook.jobs. - Фильтры в git pack-objects: Добавлена поддержка фильтров (blob:none, tree:0 и др.) при использовании
--path-walk, что позволяет существенно уменьшить размер итогового pack-файла. - Команда git format-rev: Новый инструмент для форматирования ревизий и имен объектов, удобный для использования в скриптах и хуках.
Дополнительные улучшения
- Безопасность: По умолчанию включено экранирование управляющих последовательностей терминала, передаваемых сервером. Это защищает пользователей от вредоносных действий, таких как манипуляция выводом или перемещение курсора при обращении к скомпрометированным репозиториям.
- Работа с ветками: Команда
git checkout -mнаучилась автоматически сохранять конфликтующие изменения вstash, аgit pushтеперь поддерживает отправку веток на несколько серверов одновременно. - Визуализация логов: В
git log --graphдобавлена опция--graph-lane-limitдля управления количеством вертикальных полос, аgit rev-listполучила параметр--max-count-oldestдля выбора N самых старых коммитов.
Источник: https://www.linux.org.ru



