[ON] Выпуск системы управления исходными текстами Git 2.54

Обсуждение новостей, соответствующих тематике форума

Модератор: Модераторы разделов

Аватара пользователя
rssbot
Бот
Сообщения: 6001
ОС: gnu/linux

[ON] Выпуск системы управления исходными текстами Git 2.54

Сообщение rssbot »

Представлен релиз распределенной системы управления исходными текстами Git 2.54. Git отличается высокой производительностью и предоставляет средства нелинейной разработки, базирующиеся на ответвлении и слиянии веток. Для обеспечения целостности истории и устойчивости к изменениям "задним числом" используются неявное хеширование всей предыдущей истории в каждом коммите, а также удостоверение цифровыми подписями разработчиков отдельных тегов и коммитов. Код Git распространяется под лицензией GPLv2+.


По сравнению с прошлым выпуском в новую версию принято 770 изменений, подготовленных при участии 137 разработчиков (66 впервые приняли участие в разработке Git). Основные новшества:
  • Реализована команда "git history", предоставляющая экспериментальные возможности для перезаписи истории изменений, более простые и безопасные в использовании, чем перебазирование коммитов командой "git rebase". Предоставляются две операции:
    • "git history reword ‹commit›" для перезаписи сообщения в указанном коммите без изменения рабочего дерева и индекса (кроме примечания, остальное остаётся нетронутым). Например, для исправления опечатки.
    • "git history split ‹commit›" для интерактивного разделения указанного коммита на два разных коммита с перемещением выбранных частей из исходного коммита в дополнительный коммит.
    В будущих выпусках ожидается добавление дополнительных команд:
    "git history fixup" для исправления коммита, "git history drop" для удаления коммита, "git history reorder" для изменения порядка следования коммитов и "git history squash" для объединения коммитов.
  • Реализован новый метод определения обработчиков (hook) в файлах конфигурации. Вместо размещения скриптов с обработчиками в каталоге ".git/hooks" в каждом репозитории, команды для вызова обработчиков теперь можно задавать непосредственно в файлах конфигурации. Настройки можно привязывать к репозиторию или указывать в файлах конфигурации, действующих для всех репозиториев (/etc/gitconfig) или репозиториев пользователя (~/.gitconfig). Возможна привязка нескольких обработчиков к одному событию. Скрипты из ".git/hooks" по-прежнему продолжают вызываться, но запускаются после обработчиков из файлов кофигурации. Для просмотра списка обработчиков следует использовать команду "git hook list", а для выборочного отключения вызова обработчиков - настройку "hook.‹name›.enabled = false".

    Код:

    [hook "linter"]
    event = pre-commit
    command = ~/bin/linter --cpp20

    [hook "no-leaks"]
    event = pre-commit
    command = ~/bin/leak-detector

    $ git hook list pre-commit
    global
    linter ~/bin/linter --cpp20
    local
    no-leaks
    ~/bin/leak-detector
  • В команде "git maintenance" по умолчанию задействована стратегия "geometric" ("git config set maintenance.strategy geometric"), позволяющая сократить время обслуживания крупных монорепозиториев. По сравнению с ранее применяемой стратегией, использующей логику как в команде "git gc", новая стратегия избегает переупаковки всех объектов и исключает излишне ресурсоёмкие операции, такие как слияние всех pack-файлов (по возможности объединение производится частями и без чистки удалённых объектов).
  • База данных объектов (ODB) и связанные с ней API переведены на новую архитектуру, основанную на использовании подключаемых бэкендов. Проведённая реструктуризация абстрагирует формат хранения объектов и
    в дальнейшем позволит реализовать такие возможности, как альтернативные бэкенды и форматы объектов, например, для более эффективного хранения крупных бинарных файлов или для оптимизации работы крупных git-хостингов.
  • В команде "git repo structure", выводящей сведения о структуре репозитория, обеспечено отображение не только общего размера, но и показа самых крупных объектов каждого типа, что позволяет обойтись при оценке размера без использования сторонней утилиты git-sizer.

    Код:

    $ git repo structure
    ...
    | * Largest objects
    |
    |
    | * Commits
    |
    |
    |
    * Maximum size
    [1] | 17.23 KiB |
    |
    * Maximum parents [2] |
    10
    |
    | * Trees
    |
    |
    |
    * Maximum size
    [3] | 58.85 KiB |
    |
    * Maximum entries [4] |
    1.18 k |
    | * Blobs
    |
    |
    |
    * Maximum size
    [5] | 1019.51 KiB |
    | * Tags
    |
    |
    |
    * Maximum size
    [6] |
    7.13 KiB |
  • В команде "git replay", применяемой вместо "git rebase" для воссоздания истории на сервере без рабочего дерева, включено по умолчанию атомарное обновление ссылок (вместо вывода списка команд update-ref для ручного выполнения), реализована опция "--revert" для отмены изменений от серии коммитов, обеспечено отбрасывание результирующих пустых коммитов и появилась возможность воссоздания истории вплоть до корневого коммита.
  • В "git rev-list" и похожие команды добавлена опция "--maximal-only" для показа только коммитов, недостижимых другими коммитами.
  • В команду "git repo info" добавлена опция "--keys" для вывода списка всех известных ключей.
  • В команде "git add -p" при навигации между блоками кода при помощи клавиш "J" и "K" обеспечена пометка уже одобренных и пропущенных блоков.
    Добавлена опция "--no-auto-advance" для отключения автоматического перехода к следующему файлу, чтобы иметь возможность вернуться к прошлым файлам перед коммитом.
  • Проведена оптимизация web-интерфейса "gitweb" для работы с мобильных устройств.
  • В команде "git apply --directory" перед использованием обеспечена нормализация файловых путей, таких как "./un/../normalized/path".
  • Документирована возможность добавления собственных подкоманд через размещение файлов "git-‹cmd›" в каталоге с исполняемыми файлами.
  • В команду "git send-email" добавлена поддержка клиентских сертификатов.
  • Для команды "git status" реализована настройка "status.compareBranches", через которую можно указать ветки, с которыми будет производиться сравнение текущей ветки.

    Код:

    [status]
    compareBranches = @{upstream} @{push}
  • В "git rebase" добавлена опция "--trailer" для упрощения добавления метаданных ко всем коммитам.

    Код:

    git rebase --trailer "Reviewed-by: Test ‹test@example.com›"
  • В команду "git fast-import" добавлена возможность замены подписей для коммитов, которые стали невалидны после импорта.
  • Добавлена поддержка упаковки (compaction) многопакетных индексов MIDX (multi-pack index), при которой между собой объединяются мелкие слои MIDX-индекса c информацией о доступности объектов и связанные с ними bitmap-файлы, что позволяет уменьшить число накопившихся слоёв в давно существующих репозиториях.
  • В команде "git backfill" реализована возможность указания ревизий (диапазонов коммитов) и масок путей (pathspec) для ограничения загружаемых частей истории изменений.

    Код:

    git backfill main~100..main
    git backfill -- '*.c'
  • Добавлены альтернативные формы вызова команды "git config list" - "git config -l" и "git config --list".
  • Разрешено использование не-ASCII символов в именах псевдонимов команд, задаваемых в файле конфигурации.

    Код:

    [alias "получить"]
    command = fetch
  • Изменено отображение подписей, у которых истёк срок действия GPG-ключей, но которые были валидны на момент подписания коммита. Подобные подписи теперь отображаются как корректные с примечанием об устаревании ключа (ранее они подсвечивались красным цветом, что создавало впечатление об их некорректности).
  • При обращении к репозиториям по HTTP обеспечена обработка ошибки с кодом 429 (Too Many Requests). Завершившиеся подобной ошибкой запросы теперь рассматриваются не как фатальная проблема, а как временная ошибка, для которой через какое-время следует повторить операцию. Задержка перед повтором задаётся через опцию "http.retryAfter", число повторов - "http.maxRetries", время ожидания - "http.maxRetryTime".





Источник: https://www.opennet.ru/opennews/art.shtml?num=65252
(opennet.ru, основная лента)
Последний раз редактировалось rssbot 21.04.2026 16:41, всего редактировалось 1 раз.
Причина: Updated upstream
Спасибо сказали: