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

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

Основные новшества:

  • Добавлен новый класс файлов конфигурации, прикрепляемых к разным рабочим веткам в одном репозитории (до этого предоставлялась возможность определения глобальных настроек, привязки к домашнему каталогу пользователя и привязки к репозиторию ($GIT_DIR/config));
  • Добавлен код для обнаружения на стадии выполнения «git clone» ситуаций, когда в репозитории встречаются файлы, пути к которым отличаются только регистром символов (например, path/file.txt и /path/File.Txt). Так как не все файловые системы различают регистр символов при выявлении подобных пересечений теперь выводится предупреждение;
  • Добавлена оптимизация, сокращающая объём вычислений при оценке различий: исключён учёт delta-изменений для объектов из одного ответвления с другими объектами, которые не появляются в том же ответвлённом репозитории;
  • В команду «git format-patch» добавлены опции »--interdiff» и »--range-diff» для отображении в примечании списка различий между текущей и предыдущей версиями;
  • В команду «git mailinfo», которая также используется в «git am», добавлена возможность восстановления патчей, повреждённых из-за изменения расстановки переводов строки при отправке текста почтовыми клиентом в режиме «format=flawed»;
  • Приняты более жёсткие правила в отношении «git push» и «git fetch», в случаях когда обновление ссылки приводит к нарушению согласованности, например, при извлечении и обновлении в существующие тэги. Команда «git fetch» теперь запрещает извлечение в существующие теги при вызове без явного указания опции »--force»;
  • В команды «git multi-pack-index» и «git fsck» добавлен код для определения повреждений в индексных файлах ».midx»;
  • Добавлен индикатор прогресса при генерации файлов с графом коммитов (commit-graph) и выполнении «git status» при обновлении индекса. Данные операции могут занимать достаточно много времени, что требует информирования пользователя о продолжении работы для исключения видимости зависания;
  • Повышены требования при работе на платформе Windows, в качестве минимальной поддерживаемой версии заявлена Windows Vista;
  • В скрипты автодополенения ввода, поставляемые в contrib/, добавлена поддержка дополнения опций команды «git stash list». Дополнение для команды «git fetch --multiple» ограничено только именами с внешних хостов;
  • Подсказки, выводимые при помощи команд «git help -a» и «git help -av», разделены и сделаны более понятными новичкам. Вторая команда отличается тем, что кроме подробной информации о команде выводится список альтернативных имён и внешних команд;
  • В команду «git grep» добавлена опция «git grep --recursive», отражающая поведение по умолчанию (обход всего дерева). Команда «git grep --no-recursive» может рассматриваться как аналог выставления настройки max-depth в значение 0;
  • При отправке push-запроса к репозиторию, в котором используется альтернативное внешнее хранилище для хранения объектов, удалённый обработчик «git receive-pack» передаёт список используемых ссылок на внешнее хранилище для сокращения объёма передаваемых объектов. В случае очень большого числа подобных ссылок экономия трафика за счёт сокращения числа передаваемых объектов сводится на нет из-за необходимости передачи списка очень большого размера. В новой версии добавлены настройки для управления выдачей информации об альтернативных ссылках;
  • Команда «git cmd --help» в случае, если «cmd» является псевдонимом другой команды, теперь не только выводит ссылку на основную команду, но и сразу выводит подсказку для этой команды;
  • Улучшена работа команды «git p4 unshelve»;
  • В команде «rev-list --filter» добавлена поддержка фильтра «tree:0» для исключения всех деревьев;
  • В команде «git send-email» реализовано выявление строк с адресами из всех подписей, заканчивающихся на »-by». Для отключения нового поведения добавлена опция »--suppress-cc=misc-by» и настройка «sendemail.suppresscc = misc-by»;
  • Модернизирована логика выбора имени пользователя и email на платформе Windows;
  • В «git mergetool» добавлена опция »--[no-]gui», работающая по аналогии с «git difftool»;
  • В команду «git rebase -i» добавлена поддержка ключа 'break', который можно добавлять в списки to-do для индикации конца списка до его фактического завершения;
  • Для опции »--pretty=format:» предложены новые заполнители »%GF» и »%GP», показывающие слепки ключей GPG;
  • Для платформ со свежими версиями библиотеки cURL добавлена настройка http.sslBackend, позволяющая выбрать различные бэкенды для обработки защищённых HTTPS-соединений. В Windows данная настройка позволяет переключиться между использованием OpenSSL и Secure Channel;
  • В команду «git send-email» добавлена опция »--smtp-auth=none» для отключения SMTP-аутентификации, даже если в настройках задано имя пользователя для SMTP;
  • Маска '**', указанная без слеша с одной из сторон, которая ранее считалась некорректной, теперь воспринимается как маска для определения наличия двух символов звёздочка;
  • Реализации команд «git submodule update», «git rebase» и «git rebase -i» полностью переписаны на языке Си. Проведена чистка кода, используемого для команд «git status» и «git commit --dry-run»;
  • Обеспечена возможность параллельного чтения индексных файлов для повышения производительности. Увеличена эффективность обхода дерева репозитория при извлечении веток и операциях слияния. Внесены оптимизации при частичном клонировании, связанные с кэшированием.

© OpenNet