
Tugadh isteach scaoileadh córas bainistíochta cód foinse dáilte Giota 2.55. Среди ключевых изменений: включение по умолчанию сборки с Rust, реализация для Linux процесса fsmonitor, новая стратегия переупаковки инкрементального MIDX-индекса, команда git history fixup для исправления коммита, оптимизация генерации битовых карт доступности объектов, поддержка параллельного выполнения хуков, команда git format-rev. Код Git dáilte ag ceadúnaithe faoi GPLv2+.
По сравнению с прошлым выпуском в новую версию принято 505 изменений, подготовленных при участии 100 разработчиков, 33 из которых впервые приняли участие в разработке Git.
Основные новшества (github.blog, gitlab.com/blog, gitlab.com/git-scm):
- De réir réamhshocraithe san áireamh поддержка компонентов на языке Rust. Компилятор rustc curtha leis в число сборочных зависимостей. Для сборки без Rust можно использовать флаг NO_RUST=1 при запуске утилиты make или -Drust=disabled при выполнении meson configure. Возможность отключения сборки с Rust будет поддерживаться до ветки Git 3.0, в которой Rust будет san áireamh в число обязательных зависимостей. На языке Rust реализована прослойка для переносимости между конфигурациями с хэшами SHA-1 и SHA-256, а также некоторые внутренние функции, такие как кодирование и декодирование целочисленных значений переменной длины. В будущем ожидается переработка на Rust более значительны внутренних компонентов Git.
- В экспериментальную команду "git history", предоставляющую возможности для перезаписи истории изменений, добавлена операция «git history fixup» для исправления коммита. Операция fixup позволяет перенести изменения, добавленные через git add, в более ранний коммит и автоматически переписать все последующие коммиты по аналогии с выполнением команды git commit —fixup=<commit> и запуска git rebase —autosquash <commit>~.
- Le haghaidh ardán Linux реализован фоновый процесс fsmonitor, отслеживающий изменения в файловой системе при помощи механизма in iúl и позволяющий обойтись без перебора всего рабочего каталога при выполнении таких команд, как git status. Включение осуществляется через настройку «core.fsmonitor'.
- В команду git repack добавлен режим —write-midx=incremental, реализующий новую стратегию обновления метаданных в инкрементальном MIDX-индексе (multi-pack index), позволяющую обойтись без переупаковки всего индекса. В инкрементальном многопакетном индексе вместо одного большого индекса, содержащего информацию о распределении объектов по pack-файлам, применяется разделение на слои — каждый слой охватывает определённое число pack-файлов и хранится в отдельном bitmap-файле. Подобная структура позволяет добавлять в индекс данные об объектах в новых pack-файлах, прикрепляя к индексу новые слои без перестроения уже имеющихся слоёв.Команда git repack —write-midx=incremental позволяет добавить в инкрементальный MIDX-индекс новый слой, охватывающий недавно созданные pack-файлы. В сочетании с режимом упаковки репозиториев —geometric новая команда даёт возможность объединить новые объекты из нескольких pack-файлов в один более крупный pack-файл и при необходимости осуществить упаковку и слияние нескольких соседних слоёв инкрементального MIDX-индекса. Подобная стратегия позволяет при выполнении git repack переписывать только верхние слои, оставляя старые большие слои нетронутыми, а также исключить неконтролируемое разрастание цепочки слоёв, поддерживая общее число слоёв на уровне, пропорциональном логарифму от общего числа объектов.
- Значительно оптимизирована генерация битовых карт доступности объектов за счёт нового алгоритма обхода дерева объектов, исключающего лишнюю рекурсию, кэширования позиций объектов, сортировки битовых карт до их объединения операцией XOR и переработки кода для создания битовых карт псевдослияния (pseudo-merge). В тестовом репозитории оптимизации позволили сократить время генерации битовых карт с 612 до 294 секунд.
- Реализована возможность параллельного выполнения независимых crúcaí в файлах конфигурации. Параллельно не могут запускаться хуки, влияющие на совместное состояние или учитывающие его, например, меняющие примечания к коммитам или инспектирующие индексы и рабочее дерево. При этом можно параллельно запускать хуки для проверки линтером и выполнения unit-тестирования. Допускающие параллельное выполнение хуки настраиваются через параметр hook.имя_хука.parallel = true. Число одновременно запускаемых работ определяется через настройку hook.jobs, hook.<event>.jobs или опцию командной строки -j.
- В команде git pack-objects —path-walk реализована возможность указания фильтров, таких как blob:none, blob:limit=<n>, tree:0, object:type=<type>, sparse:<oid> и combine:. В проведённом тесте отбрасывание блобов при выполнении —path-walk позволило на 16% сократить размер сформированного pack-файла.
- Добавлена команда git format-rev для форматирования ревизий и имён объектов, упоминаемых в списках коммитов или встречающихся в произвольном тексте (например, можно использовать в хуках для обработки примечаний к коммитам).
git modhnaithe go deireanach | git formáid-athbhreithniú --stdin-mode=téacs --format=%an
Junio C Hamano builtin/commit.c
- Включено по умолчанию экранирование большинства последовательностей управления терминалом в информационных сообщениях и тексте ошибок, передаваемых сервером. При обращении к вредоносному серверу подобные escape-последовательности могли использоваться для скрытия или модификации вывода, например, через escape-последовательности для перемещения курсора и очистки текста. Оставлена поддержка escape-последовательностей для выделения элементов цветом.
- Команда git checkout -m теперь автоматически сохраняет конфликтующие локальные изменения в stash-области без необходимости незамедлительно разрешать конфликт.
- В команду git push добавлена возможность помещения ветки на несколько внешних Git-серверов одной командой. Например, для передачи ветки main не только на основной сервер, но и на зеркала можно создать группу publish из серверов github, gitlab и mirror:
git config remotes.publish "github gitlab mirror"
príomhfhoilsiú brú git
- В команду git log —graph добавлена опция —graph-lane-limit=<N> для ограничения числа вертикальных полос при визуализации веток, что позволяет оставить место на экране под данные о коммитах в репозиториях с большим числом веток.
...
* | | | | 619931f561 Cumaisc an bhrainse 'dl/posix-unused-warning-clang'
|\ \ \ \ \
| * | | | ~ cf48887610 compat/posix.h: simpligh comparáid GIT_GNUC_PREREQ()
| * | | | ~ ffd45926dc compat/posix.h: glan suas GIT_GNUC_PREREQ() agus UNUSED
|\ \ \ \ \~
| * | | | ~3f5203eeb4 comhaid-ls: scagaire cosán-spec roimh lstat
- В команды git log и git rev-list добавлена опция —max-count-oldest=<N>, позволяющая выбрать N самых старых коммитов в диапазоне.
Foinse: linux.org.ru
