После двух месяцев разработки опубликован выпуск распределенной системы управления исходными текстами Git 2.35. Git является одной из самых популярных, надёжных и высокопроизводительных систем управления версиями, предоставляющей гибкие средства нелинейной разработки, базирующиеся на ответвлении и слиянии веток. Для обеспечения целостности истории и устойчивости к изменениям "задним числом" используются неявное хеширование всей предыдущей истории в каждом коммите, также возможно удостоверение цифровыми подписями разработчиков отдельных тегов и коммитов.
По сравнению с прошлым выпуском в новую версию принято 494 изменения, подготовленные при участии 93 разработчиков, из которых 35 впервые приняли участие в разработке. Основные новшества:
По сравнению с прошлым выпуском в новую версию принято 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.
Выпуск системы управления исходными текстами Git 2.35
www.opennet.ru