Выпуск распределенной системы управления исходными текстами Git 2.21
25 февраля 2019 года
Представлен выпуск распределенной системы управления исходными текстами Git 2.21.0. Git является одной из самых популярных, надёжных и высокопроизводительных систем управления версиями, предоставляющей гибкие средства нелинейной разработки, базирующиеся на ответвлении и слиянии веток. Для обеспечения целостности истории и устойчивости к изменениям задним числом используются неявное хеширование всей предыдущей истории в каждом коммите, также возможно удостоверение цифровыми подписями разработчиков отдельных тегов и коммитов.
По сравнению с прошлым выпуском в новую версию принято 500 изменений, подготовленных при участии 74 разработчиков, из которых 20 впервые приняли участие в разработке. Основные новшества:
- В "git log" и другие команды добавлена опция "--date=human", позволяющая выводить даты в сокращённом читаемом виде, адаптивно выбирая формат в зависимости от давности события. Например, вместо "Mon Feb 25 08:20:14 2019 -0500" для только что совершённых действий будет указано "N минут назад" (как в режиме "--date=relative"), для недавних событий будет показан день и час, а для старых изменений только день, месяц и год:
Дополнительно предусмотрена опция "--date=auto:human", которая применяет новое форматирование только при выводе через терминал, а при перенаправлении вывода в файл или в другую команду использует формат по умолчанию:
- Добавлена опциональная возможность применения алгоритма хэширования SHA-256 вместо скомпрометированного SHA-1 при сборке Git в режиме "NewHash". Код для обхода дерева объектов изменён с учётом того, что имена объектов могут вычисляться не только с использованием SHA-1. Изначально планировалось использовать алгоритм SHA3-256, но в конечном счёте разработчики остановились на SHA-256, так как SHA2 уже применяется в Git для цифровых подписей. Логика выбора в том, при использовании SHA-256 и SHA3-256 в коде Git, компрометация любого из них приведёт к проблемам с безопасностью, поэтому лучше зависеть от одного алгоритма, а не от двух. Кроме того,
SHA-256 широко распространён и поддерживается во всех криптографических библиотеках, а также демонстрирует очень хорошую производительность;
- В команде "git cherry-pick" обеспечена возможность использования опции "-m" (mainline) при указании "git cherry-pick -m1", т.е. позволяет повторно применить коммит при выборе первого родителя этого коммита в качестве mainline-ветки. В остальных случаях как и раньше будет выводиться ошибка;
- C целью оптимизации производительности команда "git log -G", осуществляющая поиск по регулярному выражению теперь не выполняет поиск в бинарных файлах, если дополнительно явно не указана опция "--text" или не применён textconv;
- Добавлена настройка "http.version", позволяющая определить предпочитаемую версию протокола HTTP, применяемую при извлечении или отправке изменений. Для работы опции требуется относительно свежая библиотека cURL;
- "git push $there $src:$dst" выдаёт ошибку, если в $dst указан относительный путь и точно не ясно, что пользователь имел в виду. В новой версии текст ошибки стал более понятным и добавлена подсказка с
попыткой угадать место назначения с учётом типа объекта;
- В команде "git checkout [tree-ish] path..." обеспечен вывод числа путей, которые будут извлечены из индекса или дерева объектов ( tree-ish);
- В команду "git quiltimport" добавлена опция "--keep-non-patch";
- Команды "git worktree remove" и "git worktree move" теперь можно применять при наличии в рабочем дереве неинициализированных субмодулей (ранее данные операции невозможно было использовать при наличии любого субмодуля);
- Обновлены реализации команд "git multimail" и "git p4";
- При указании опции "--format=" для веток, тегов и при переборе ссылок расширен перечень свойств объектов, извлекаемых через API object_info;
- В команде "git rebase -i" обеспечен повторный запуск команды, указанной при помощи настройки 'exec', в случае если прошлая попытка не увенчалась успехом;
- Обновлена реализация команды "git diff --color-moved-ws";
- В "log --format" добавлена поддержка флага "%S" для отображения подсказки об источнике поступления коммита;
- В скрипт "git instaweb", используемый для запуска интерфейса gitweb для доступа через Web к локальному репозиторию, добавлена поддержка применения предоставляемых в Python модулей для встраивания функциональности http-сервера (http.server=python), без необходимости установки внешних http-серверов, таких как lighttp и apache httpd;
- Проведена оптимизация и чистка кода, связанного с проверкой несвязанных объектов. Обновлена реализация кэша для ускорения поиска несвязанных объектов;
- Запрещено использование в коде функции "strncat()";
- Реализация "git rebase --merge" переписана для использования общего кода, уже применяемого в "git rebase -i";
- Некоторые части "git bisect", ранее реализованные на Shell, переписаны на языке Си;
- В "git fetch-pack" и "git fetch --deepen=..." добавлена поддержка второй версии протокола Git. Команды "git fetch" и "git upload-pack" адаптированы для отправки данных через дополнительные каналы доставки при использовании второй версии протокола Git.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.