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

Kate

Administrator
Команда форума
После двух месяцев разработки опубликован выпуск распределенной системы управления исходными текстами 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.

 
Сверху