Найти тему
Проект OpenNet

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

После трёх месяцев разработки опубликован выпуск распределенной системы управления исходными текстами 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 <branch> [<start-point>]" запрещено обновление и извлечение веток, использующих другое рабочее дерево. Для возвращения старого поведения добавлена опция "--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" в командной строке.