Вышла версия Git 2.55 с большим ускорением для крупных репозиториев Linux
В рамках проекта Git выпущена версия 2.55, в которой улучшена производительность, оптимизирован рабочий процесс и добавлены новые экспериментальные команды для самой популярной в мире системы контроля версий.
Для пользователей Linux наиболее примечательной особенностью является поддержка встроенного в Git демона мониторинга файловой системы. Ранее встроенный в Git демон FSMonitor был доступен только в macOS и Windows. В Git 2.55 это исправлено: добавлена поддержка Linux и использование подсистемы inotify ядра для отслеживания изменений в файловой системе.
Ожидается, что это ускорит выполнение таких команд, как git status в больших репозиториях. Вместо того чтобы сканировать все рабочее дерево, Git запрашивает у демона мониторинга информацию об изменениях в файлах.
Одна из особенностей Linux заключается в том, что в реализации используется по одному мониторингу inotify для каждого каталога. Для очень больших репозиториев может потребоваться увеличение fs.inotify.max_user_watches лимита. Поддержка FSMonitor для репозиториев, подключенных по сети, предоставляется по желанию.
В Git 2.55 также улучшена поддержка репозиториев, особенно для крупных проектов. В этом выпуске git repack может записывать инкрементные цепочки индексов с несколькими пакетами с помощью git repack --write-midx=incremental.
В Git 2.55 также появилась новая экспериментальная команда git history fixup <commit>, которая позволяет пользователям применять зафиксированные изменения непосредственно к более раннему коммиту и воспроизводить последующие коммиты поверх него.
Это более простая альтернатива рабочим процессам git commit --fixup и git rebase --autosquash . Однако эта команда остается экспериментальной и консервативной: если применение подготовленных изменений приведет к конфликту, Git прервет процесс, а не оставит пользователя в сложном состоянии, требующем переделки.
В этом выпуске также улучшены настраиваемые хуки. В Git 2.54 появились хуки на основе конфигурации, которые можно определять в конфигурации Git, а не только как исполняемые файлы в каталоге hooks. Теперь в Git 2.55 эта функция расширена: совместимые настраиваемые хуки могут выполняться параллельно.
Например, независимые проверки перед коммитом, такие как линтинг и модульные тесты, теперь могут выполняться одновременно, если они помечены как безопасные для параллельного выполнения. Хуки, зависящие от общего состояния, например те, что проверяют индекс или рабочее дерево, по-прежнему выполняются последовательно.
Улучшения в производительности коснулись и генерации битовой карты достижимости, что позволило Git быстрее отвечать на запросы о достижимости объектов во время таких операций, как переупаковка. Тесты, приведенные в обзоре релиза, показывают, что время генерации битовой карты в одном большом репозитории сократилось примерно с 612 до 294 секунд.
Рабочие процессы частичного клонирования и фильтрации пакетов выигрывают от улучшений в git pack-objects --path-walk. В Git 2.55 этот режим можно комбинировать с такими фильтрами, как blob:none, blob:limit=<n>, tree:0 и другими.
Помимо упомянутых выше, в Git внесено еще несколько незначительных изменений. В частности, Git теперь по умолчанию маскирует большинство управляющих символов терминала при выводе на удаленный терминал, что снижает риск некорректного или нежелательного поведения терминала во время таких операций, как git push, но при этом позволяет использовать цветовые последовательности ANSI.
Кроме того, команда git checkout -m стала более безопасной. При переключении веток с локальными изменениями Git использует внутреннюю функцию автосохранения, чтобы сохранять конфликтующие изменения, позволяя повторно применить их позже, а не требовать немедленного разрешения конфликта.
Еще одно нововведение в этом выпуске — поддержка отправки в удаленные группы. Эта функция упрощает публикацию одной и той же ветки на нескольких удаленных серверах, например на основном хосте и зеркалах. Пользователи могут создать группу удаленных серверов и отправить изменения на все серверы одной командой.
Для пользователей, которым важна визуализация истории, в git log --graph теперь есть опция --graph-lane-limit=<n> . Она ограничивает ширину графика, заменяя полосы, выходящие за пределы, на ~, что делает широкие истории более удобными для чтения в терминале.
Наконец, в Git 2.55 появилась опция --max-count-oldest=<n> для git rev-list и семейства команд git log . В отличие от опции -n, которая выбирает самые последние коммиты, эта опция выбирает самые старые коммиты в заданном диапазоне без постобработки на стороне оболочки.
Более подробную информацию можно найти в официальном объявлении.
Редактор: AndreyEx
Важно: Данная статья носит информационный характер. Автор не несёт ответственности за возможные сбои или ошибки, возникшие при использовании описанного программного обеспечения.