Выпуск распределенной системы управления исходными текстами 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»), для недавних событий будет показан день и час, а для старых изменений только день, месяц и год: 0_1551072044.png

    Дополнительно предусмотрена опция »--date=auto: human», которая применяет новое форматирование только при выводе через терминал, а при перенаправлении вывода в файл или в другую команду использует формат по умолчанию:

    0_1551072113.png
  • Добавлена опциональная возможность применения алгоритма хэширования SHA-256 вместо скомпрометированного SHA-1 при сборке Git в режиме «NewHash». Код для обхода дерева объектов изменён с учётом того, что имена объектов могут вычисляться не только с использоваинем SHA-1;
  • В команде «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.

© OpenNet