Вышел Git 2.55 — релиз, собранный силами более сотни контрибьюторов, из которых 33 участвовали впервые. Формально это обычный квартальный апдейт, но по содержанию — один из самых заметных за последнее время: в нём есть и стратегический сдвиг в самом проекте, и пара вещей, которые сразу почувствуют разработчики на больших репозиториях.
Стратегическое — Rust теперь включён в сборку по умолчанию. Раньше поддержка Rust была опциональной, теперь, чтобы собрать Git без неё, нужно явно передать NO_RUST. Для конечного пользователя ничего не меняется, но для мейнтейнеров дистрибутивов и всех, кто собирает Git из исходников в своих образах, это значит, что в билд-окружении должен появиться Rust-тулчейн.
Практическое — развитие экспериментальной команды git history, появившейся в 2.54. В 2.55 к ней добавили git history fixup: она вливает застейдженные изменения прямо в старый коммит и автоматически перекладывает потомков, без захода в интерактивный rebase. Для тех, кто живёт на стеке из пяти-шести веток и правит нижний коммит по ревью, это экономит нервы едва ли не больше, чем время.
Дальше — производительность. Репак научился писать инкрементальные цепочки multi-pack index напрямую, так что обслуживание больших репозиториев становится по-настоящему инкрементальным, а не «переупакуй всё заново». Генерация bitmap'ов в тестах проекта ускорилась почти вдвое — примерно с 612 до 294 секунд. Хуки теперь умеют выполняться параллельно: hook.<name>.parallel = true плюс hook.jobs для ограничения конкурентности. И, наконец, встроенный демон fsmonitor, который до сих пор работал только на macOS и Windows, заработал на Linux через inotify — это тот самый механизм, который превращает git status в монорепе из многосекундной паузы в мгновенный ответ. Из мелочей: новая команда git format-rev, группы remote'ов для git push, опции --graph-lane-limit и --max-count-oldest.
Что делать разработчику. Обновление безопасное, ломающих изменений для пользователей нет — ставьте из пакетного менеджера, как обычно. Но два действия окупятся сразу. Первое: если вы работаете с крупной репой на Linux, включите fsmonitor — git config core.fsmonitor true и git config core.untrackedCache true, затем прогоните git status дважды и сравните время; на монорепах разница измеряется секундами на каждой команде. Второе: если у вас несколько pre-commit-хуков (линтер, форматтер, проверка секретов), переведите их на параллельный запуск через hook.<name>.parallel — коммит перестанет быть паузой на кофе. Отдельно предупредите свой DevOps: если Git собирается из исходников в CI-образе, туда теперь нужен Rust-тулчейн, иначе сборка упадёт, — либо явный NO_RUST=1 как временная мера.
Комментарии