Выпуск распределенной системы управления исходными текстами Git 2.21
Представлен выпуск распределенной системы управления исходными текстами 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", которая применяет новое форматирование только при выводе через терминал, а при перенаправлении вывода в файл или в другую команду использует формат по умолчанию: - В "git fetch-pack" и "git fetch --deepen=..." добавлена поддержка второй версии протокола Git. Команды "git fetch" и "git upload-pack" адаптированы для отправки данных через дополнительные каналы доставки при использовании второй версии протокола Git;
- Добавлена опциональная возможность применения алгоритма хэширования SHA-256 вместо скомпрометированного SHA-1 при сборке Git в режиме "NewHash". Код для обхода дерева объектов изменен с учетом того, что имена объектов могут вычисляться не только с использоваинем SHA-1;
- В команде "git cherry-pick" обеспечена возможность использования опции "-m" (mainline) при указании "git cherry-pick -m1", т. е. позволяет повторно применить коммит при выборе первого родителя этого коммита в качестве mainline-ветки. В остальных случаях как и раньше будет выводиться ошибка;
- Команда "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 к локальному репозиторию, кроме работы под управлением внешнего http-сервера, добавлена поддержка применения предоставляемых в Python модулей для встраивания функциональности http-сервера (http.server=python);
- Проведена оптимизация и чистка кода, связанного с проверкой несвязанных объектов. Обновлена реализация кэша для ускорения поиска несвязанных объектов;
- Запрещено использование в коде функции "strncat";
- Реализация "git rebase --merge" переписана для использования общего кода, применяемого в "git rebase -i";
- Код "git bisect" переписан на языке Си.