Git, распределенная система контроля версий и краеугольный инструмент разработки программного обеспечения, помогающий разработчикам эффективно управлять изменениями в коде в разных проектах, только что выпустила новую версию 2.49.
Одним из самых важных моментов является обновленная функция имени-хэша Git, которая влияет на то, как система группирует схожие объекты для дельта-сжатия. Например, когда большой файл развивается посредством незначительных правок, Git может хранить новые версии более эффективно, ссылаясь на старые.
Более того, дебютирует Git 2.49 git backfill, который объединяет исторические запросы blob. Вместо того, чтобы запускать поток поочередных загрузок, новый инструмент отправляет небольшое количество пакетных запросов, группируя объекты по пути файла.
Результатом являются меньшие накладные расходы, меньшее количество циклов и улучшенное дельта-сжатие со стороны сервера. При запуске с —sparseопцией (включается автоматически, если в вашем репозитории настроена разреженная проверка), git backfillизвлекаются только отсутствующие блобы, относящиеся к вашему разреженному дереву.
Еще одним улучшением, ориентированным на производительность, является добавленная поддержка zlib-ng, современного ответвления широко используемой библиотеки zlib. Zlib-ng оптимизирует различные наборы инструкций SIMD (например, SSE2 и AVX2) и оптимизирует устаревший код, обеспечивая заметный прирост скорости при сжатии и распаковке объектов Git.
Следующая остановка – Rust. Git 2.49 приветствует свои первые крейты Rust: libgit-sysи libgit. Эти крейты обертывают часть внутреннего библиотечного кода Git в низко- и высокоуровневые API Rust. Хотя текущая реализация представляет собой небольшое доказательство концепции, в основном сосредоточенное на config.hинтерфейсах Git, она открывает дверь для будущих улучшений на основе Rust.
А теперь что-то очень полезное — если вы когда-либо неправильно написали команду (например, набрали git psuhвместо git push), вы знаете, что Git иногда пытается это исправить. Раньше установка help.autocorrectзначения «1» приводила к тому, что предлагаемая команда запускалась почти немедленно, что могло показаться неприятным, особенно когда ее принимали за простое логическое значение «истина».
С Git 2.49 функция автокоррекции была согласована с другими булевыми настройками проекта. «1» теперь просто означает «включено», а числовые значения выше единицы по-прежнему указывают задержку в децисекундах. Таким образом, старое поведение «моргания глаза» заменено, что помогает гарантировать отсутствие непреднамеренных условий гонки между пользователем и клавиатурой.
И последнее, но не менее важное: до сих пор —branchпараметр in git cloneбыл ограничен ветками или тегами, что затрудняло клонирование конкретного коммита без ссылочной метки.
Git 2.49 представляет —revision, который разрешает любой произвольный коммит (даже если у него нет ветки или тега) и извлекает только его соответствующую историю. Таким образом, конвейеры CI или специализированные рабочие процессы могут извлекать точный необходимый коммит без ручных удаленных конфигураций.
Более подробную информацию обо всех изменениях и нововведениях в Git 2.49 можно найти в анонсе релиза.