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

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

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

  • Расширены возможности по использованию SSH-ключей для заверения Git-объектов цифровой подписью. Для разграничения времени действия нескольких ключей добавлена поддержка OpenSSH-директив «valid-before» и «valid-after», при помощи которых можно обеспечить корректную работу с подписями после ротации ключа одного из разработчиков. До этого, возникала проблема с разделением подписей старым и новым ключом — если удалить старый ключ, то невозможно будет проверить сделанные с его помощью подписи, а если оставить — то сохранится возможность создания новых подписей старым ключом, на смену которому уже пришёл другой ключ. При помощи valid-before и valid-after можно разделить область действия ключей на основе времени создания подписи.
  • В настройке merge.conflictStyle, позволяющей выбрать режим оформления информации о конфликтах при слиянии, появилась поддержка режима «zdiff3», перемещающего за пределы области конфликта все типовые строки, указанные в начале или конце конфликта, что позволяет добиться более компактного представления информации.
  • В команду «git stash» добавлен режим «—staged», который позволяет спрятать только изменения, добавленные в индекс, например в ситуации, когда необходимо временно отложить часть сложных изменений для того, чтобы вначале добавить то, что уже готово, а с остальным разобраться через какое-то время. Режим напоминает команду «git commit», записывающую только помещённые в индекс изменения, но вместо создания нового коммита в «git stash —staged» результат сохраняется во временную область stash. После того, как изменения понадобятся их можно вернуть командой «git stash pop».
  • В команду «git log» добавлен новый спецификатор формата «—format=%(describe)», позволяющий совместить вывод «git log» с результатом выполнения команды команды «git describe». Параметры для «git describe» указываются непосредственно внутри спецификатора («—format=%(describe:match=<foo>,exclude=<bar>)»), в котором также можно включить сокращённые теги («—format=%(describe:tags=<bool>)») и настроить число шестнадцатеричных символов для идентификации объектов («—format=%(describe:abbrev=<n>)»). Например, для вывода 8 последних коммитов, теги которых не имеют метки кандидата в релизы, и указания 8-символьных идентификаторов можно использовать команду: $ git log -8 —format=’%(describe:exclude=*-rc*,abbrev=13)’ v2.34.1-646-gaf4e5f569bc89 v2.34.1-644-g0330edb239c24 v2.33.1-641-g15f002812f858 v2.34.1-643-g2b95d94b056ab v2.34.1-642-gb56bd95bbc8f7 v2.34.1-203-gffb9f2980902d v2.34.1-640-gdf3c41adeb212 v2.34.1-639-g36b65715a4132
  • В настройке user.signingKey реализована поддержка новых типов ключей, не ограничивающихся типом «ssh-» и указанием полного файлового пути к ключу. Альтернативные типы задаются при помощи префикса «key::», например, «key::ecdsa-sha2-nistp256» для ключей ECDSA.
  • Заметно повышена скорость генерации списка изменений в режиме «—histogram», а также при использовании опции «—color-moved-ws», управляющей подсвечиванием пробелов в цветном diff-е.
  • В команде «git jump», применяемой для предоставления Vim информации о точных переходах на искомую позицию в файле при разборе конфликтов слияния, просмотре различий или выполнении операции поиска, предоставлена возможность сужения охватываемых конфликтов слияния. Например, для ограничения операций только каталогом «foo» можно указать «git jump merge — foo», а для исключения из обработки каталога «Documentation» — «git jump merge — ‘:^Documentation'»
  • Проведена работа по стандартизации применения типа «size_t» вместо «unsigned long» для значений, представляющих размер объектов, что позволило добиться возможности применения фильтров «clean» и «smudge» с файлами размером более 4 ГБ на всех платформах, включая платформы с моделью данных LLP64, тип «unsigned long» в которой ограничен 4 байтами.
  • В команду «git am» добавлена опция «—empty=(stop|drop|keep)», позволяющая при разборе патчей из почтового ящика выбрать поведение для пустых писем, не содержащих патчей. Значение «stop» приведёт к завершению всей операции применения патчей, «drop» — пропустит пустой патч, «keep» — создаст пустой коммит.
  • В команды «git reset», «git diff», «git blame», «git fetch», «git pull» и «git ls-files» добавлена поддержка частичных индексов (sparse index), позволяющих повысить производительность и сэкономить место в репозиториях, в которых выполняются операции частичного клонирования (sparse-checkout).
  • Объявлена устаревшей команда «git sparse-checkout init», вместо которой следует использовать «git sparse-checkout set».
  • Добавлена начальная реализация нового бэкенда «reftable» для хранения ссылок, таких как ветки и теги, в репозитории. Новый бэкенд использует блочное хранилище, применяемое проектом JGit и оптимизированное для хранения очень большого числа ссылок. Бэкенд пока не интегрирован с системой ссылок (refs) и не готов для практического применения.
  • Цветовая палитра команды «git grep» приведена к соответствию утилите GNU grep.

Источник: opennet.ru

Добавить комментарий