Проект Git выпустил Git 2.55. Новая версия улучшает производительность, рабочие процессы и добавляет экспериментальные команды.
Для пользователей Linux наиболее заметным нововведением стала поддержка встроенного демона мониторинга файловой системы Git. Раньше встроенный FSMonitor был доступен только в macOS и Windows. Теперь Git 2.55 добавляет поддержку Linux, используя подсистему ядра inotify для отслеживания изменений файловой системы.
Это должно ускорить выполнение команд вроде git status в больших репозиториях. Вместо полного сканирования рабочего каталога Git запрашивает информацию об изменениях у демона мониторинга.
Необходимо учитывать, что в Linux реализация использует по одному inotify-слежению на каталог. В очень крупных репозиториях может потребоваться увеличить лимит fs.inotify.max_user_watches. Поддержка репозиториев, смонтированных по сети, остаётся опциональной.
В Git 2.55 также улучшено обслуживание репозиториев, особенно крупных. Теперь команда git repack может записывать инкрементальные цепочки multi-pack index с помощью опции git repack --write-midx=incremental.
Также представлена новая экспериментальная команда git history fixup <commit>, позволяющая применять проиндексированные изменения напрямую к более раннему коммиту и переигрывать последующие коммиты поверх.
Это более прямой способ по сравнению с рабочим процессом git commit --fixup и git rebase --autosquash. Однако команда пока экспериментальная и работает осторожно: если применение изменений вызовет конфликт, Git прерывает операцию, не оставляя пользователя в сложном состоянии перезаписи.
Улучшена работа настраиваемых хуков. В Git 2.54 появилась возможность задавать хуки через конфигурацию Git, а не только как исполняемые файлы в каталоге hooks. Теперь Git 2.55 расширяет это, позволяя выполнять совместимые настроенные хуки параллельно.
Например, независимые проверки перед коммитом, вроде линтинга и модульных тестов, могут теперь выполняться параллельно, если отмечены как безопасные для одновременного запуска. Хуки, которые зависят от общего состояния (например, анализируют индекс или рабочее дерево), по-прежнему запускаются последовательно.
Производительность улучшена и в генерации reachability bitmap, благодаря чему Git быстрее отвечает на запросы о достижимости объектов при операциях вроде перепаковки. Приведённые в обзоре тесты показывают, что в одном крупном репозитории время генерации bitmap сократилось с примерно 612 до 294 секунд.
Улучшения команды git pack-objects --path-walk принесут пользу рабочим процессам с частичным клонированием и отфильтрованными пакетами. В Git 2.55 этот режим можно комбинировать с фильтрами, такими как blob:none, blob:limit=<n>, tree:0 и другими.
Помимо перечисленного, есть и другие небольшие изменения. Так, 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, которая выбирает последние коммиты, эта опция выбирает самые старые коммиты в диапазоне без дополнительной обработки в командной оболочке.
Дополнительные подробности смотрите в официальном анонсе.




Пока нет комментариев. Будьте первым!