Доступна система управления исходными текстами Git 2.43

После трёх месяцев разработки опубликован выпуск распределенной системы управления исходными текстами Git 2.43. Git является одной из самых популярных, надёжных и высокопроизводительных систем управления версиями, предоставляющей гибкие средства нелинейной разработки, базирующиеся на ответвлении и слиянии веток. Для обеспечения целостности истории и устойчивости к изменениям “задним числом” используются неявное хеширование всей предыдущей истории в каждом коммите, также возможно удостоверение цифровыми подписями разработчиков отдельных тегов и коммитов.

По сравнению с прошлым выпуском в новую версию принято 464 изменения, подготовленные при участии 80 разработчиков, из которых 17 впервые приняли участие в разработке. Основные новшества:

  • В команду “git repack” добавлены опции “–filter” и “–filter-to”, позволяющие выполнить переупаковку репозитория c учётом заданного фильтра объектов, и при необходимости перенести в отдельное место объекты, не удовлетворяющие заданному фильтру. Опции можно использовать для разделения репозитория в соответствии с определёнными критериями (например, для выноса ненужных или слишком больших объектов), сохраняя при этом возможность доступа ко всем частям при помощи частичного клонирования. Например для оставления в репозитории блобов, размером менее 1 МБ, и выносом в отдельный репозиторий (backup.git) остальных крупных объектов, можно выполнить: $ git init –bare ../backup.git $ git repack -ad –filter=’blob:limit=1m’ –filter-to=../backup.git/objects/pack/pack

    Инициализация репозитория при помощи частичного клонирования, позволяет работать с неполной копией репозитория, корректно обрабатывая обращения к отсутствующим объектам (при обращении к отсутствующим объектам, будут на лету загружаться по мере необходимости).

  • Добавлена возможность работы с несколькими pack-файлами с информацией о недостижимых объектах (“cruft packs”), на которые в репозитории отсутствуют ссылки (не ссылаются ветки или теги). При помощи новой опции “git repack –max-cruft-size” можно определить максимальный размер отдельного pack-файла и добиться разделения базы недостижимых объектов на серию pack-файлов небольшого размера. Использование нескольких мелких pack-файлов вместо одного крупного позволяет значительно сократить операции ввода/вывода при переупаковке репозиториев с большим числом недостижимых объектов, так как для каждой операции переупаковки не нужно будет перезаписывать все данные.
  • Добавлено распознавание попыток выполнения двойной отмены коммита через “git revert” и учёта этого факта при формировании сообщения об отмене (при повторном “git revert” вместо “Revert: Revert: fix bug” будет записано “Reapply fix bug”, а если откатить изменение третий раз – “Revert Reapply fix bug”). $ git revert –no-edit HEAD >/dev/null $ git revert –no-edit HEAD >/dev/null $ git log –oneline a300922 (HEAD -> main) Reapply “fix bug” 0050730 Revert “fix bug” b290810 fix bug
  • Разрешено совместное использование опций “–rfc” и “–subject-prefix”. Например, для формирования письма с префиксом “[RFC PATCH bpf-next]” в теме сообщения можно указать: $ git format-patch –subject-prefix=”PATCH bpf-next” –rfc
  • В команде “git log” разрешено указание заполнителя “%(decorate)” для показа имён связанных веток при определении формата при помощи опции “–format”, например: $ git log –format=’%cr%(decorate) (%h) %s’ 3 days ago (HEAD -> master, origin/master, origin/HEAD) (e0939bec27) RelNotes: minor wording fixes in 2.43.0 release notes 7 days ago (tag: v2.43.0-rc1) (dadef801b3) Git 2.43-rc1 7 days ago (8ed4eb7538) Merge branch ‘tb/rev-list-unpacked-fix’
  • В “git for-each-ref” и похожие команды добавлена возможность применения правил .mailmap к заданным через опцию “–format” спецификаторам формата, таким как “%(authorname)” и “%(committeremail)”.
Release. Ссылка here.