После трёх месяцев разработки опубликован выпуск распределенной системы управления исходными текстами Git 2.44. Git является одной из самых популярных, надёжных и высокопроизводительных систем управления версиями, предоставляющей гибкие средства нелинейной разработки, базирующиеся на ответвлении и слиянии веток. Для обеспечения целостности истории и устойчивости к изменениям “задним числом” используются неявное хеширование всей предыдущей истории в каждом коммите, также возможно удостоверение цифровыми подписями разработчиков отдельных тегов и коммитов. Код Git распространяется под лицензией GPLv2+.
По сравнению с прошлым выпуском в новую версию принято 503 изменения, подготовленных при участии 85 разработчиков, из которых 34 впервые приняли участие в разработке. Основные новшества:
- Добавлена новая команда “git replay”, которая может применяться в качестве альтернативы “git rebase” и использоваться для воссоздания истории на сервере без рабочего дерева (bare-репозиторий, не содержащий рабочего дерева), обработки одновременно нескольких веток, выполнения операции rebase для веток, отличных от извлечённых в данный момент, или просто для ускорения операций слияния.
- Добавлена поддержка системы непрерывной интеграции GitLab CI.
- В команды “git add” и “git stash” добавлена поддержка атрибутов путей “:(attr:…)”, задаваемых по аналогией с командой “git show”. Например “git add ‘:(attr:~binary)'” можно использовать для добавления всех текстовых (не бинарных) файлов в индекс. Дополнительно в новом выпуске предложен атрибут “builtin_objectmode” для фильтрации файловых путей по правам доступа.
Например, “git add ‘:(attr:builtin_objectmode=100755)'” можно использовать для добавления всех исполняемых файлов. - Добавлена поддержка повторного использования объектов, распределённых по нескольким pack-файлам, для которых присутствует сводный индекс (multi-pack-index) с данными о доступности объектов (оптимизация, позволяющая вместо фактической передачи данных, сослаться на использование данных, уже присутствующих в pack-файлах). Начиная с версии 2.44 git при теперь может обрабатывать повторное использование объектов поверх нескольких pack-файлов, без необходимости переупаковки репозитория в один pack-файл. Для включения новой возможности следует выполнить команды: git config –global pack.allowPackReuse multi git multi-pack-index write –bitmap
после чего число pack-файлов, из которых повторно используются объекты, можно отследить в значении “pack-reused … (from N)”, показываемом при выполнении “git push”.
- Команда “git rebase –autosquash” теперь может применяться для операций rebase в неинтерактивном режиме, что позволяет выполнить rebase и быстро применить fixup-исправления без инспектирования списка изменений и не меняя переменную окружения GIT_SEQUENCE_EDITOR.
- В команду “git merge-file” добавлена опция “–diff-algorithm” для
выбора альтернативного алгоритма оценки различий между файлами. - В команде “git checkout -B []” запрещено обновление и извлечение веток, использующих другое рабочее дерево. Для возвращения старого поведения добавлена опция “–ignore-other-worktrees”.
- Добавлена возможность присвоения настройке “git config advice.pushAlreadyExists” значения “true”, убирающего при выводе подсказок (hint) инструкцию по их отключению (“Disable this message with…”), занимающую место на экране.
- Оптимизировано выполнение команды “git for-each-ref” с опцией “–no-sort”, которая теперь приводит к выводу в неопределённом порядке (ранее при указании “–no-sort” всё равно применялась сортировка по алфавиту). После внесения оптимизаций применение “–no-sort” теперь ускоряет “git for-each-ref” примерно на 20% в репозиториях с большим числом ссылок.
- В бэкенд управления учётными данными wincred добавлена поддержка обновления токенов OAuth, по аналогии тем как это реализовано в бэкендах credential-cache и credential-libsecret.
- В “git fetch” добавлена поддержка параметра конфигурации “fetch.all”, который будет обработан по аналогии с добавлением опции “–all” в командной строке.