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

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

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

  • В команду «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
    
  • Расширены возможности по использованию SSH-ключей для заверения Git-объектов цифровой подписью. Для разграничения времени действия нескольких ключей добавлена поддержка OpenSSH-директив valid-before и valid-after, при помощи которой можно обеспечить корректную работу с подписями после ротации ключа одного из разработчиков. До этого, возникала проблема с разделением подписей старым и новым ключом — если удалить старый ключ, то невозможно будет проверить сделанные с его помощью подписи, а если оставить — то сохранится возможность создания новых подписей старым ключом, на смену которому уже пришёл новый ключ. При помощи valid-before и valid-after можно разделить область действия ключей на основе времени создания подписи.

  • В настройке user.signingKey реализована поддержка новых типов ключей, не ограничивающихся типом «ssh-» и указанием полного файлового пути к ключу. Альтернативные типы задаются при помощи префикса «key::», например, «key: ecdsa-sha2-nistp256» для ключей ECDSA.

  • В настройке merge.conflictStyle, позволяющей выбрать режим оформления информации о конфликтах при слиянии, появилась поддержка режима «zdiff3», перемещающего все типовые строки в начале или конце конфликта за пределы области конфликта, что позволяет добиться более компактного представления информации.

  • Заметно повышена скорость генерации списка изменений в режиме »--histogram», а также при использовании опции »--color-moved-ws», управляющей подсвечиванием пробелов в цветном diff-е.

  • В команде «git jump», применяемой для предоставления Vim информации о точных переходах на искомую позицию в файле при разборе конфликтов слияния, просмотре различий и выполнении операции поиска, предоставлена возможность сужения охватываемых конфликтов слияния. Например, для ограничения операций только каталогом «foo» можно указать «git jump merge — foo», а для исключения из обработки каталога «Documentation» — «git jump merge — ':^Documentation'»

  • Проведена работа по стандартизации применения корректного типа size_t вместо «used unsigned» для значений, представляющих размер объектов, что позволило добиться возможности применения фильтров «clean» и «smudge» с файлами, размером более 4 ГБ, на всех платформах, включая платформы с моделью данных LLP64, тип «used unsigned» в которой ограничен 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.



Источник: http://www.opennet.ru/opennews/art.shtml? num=56570

© OpenNet