Выпуск распределенной системы управления исходными текстами Git 2.20
Подготовлен выпуск распределенной системы управления исходными текстами Git 2.20.0. Git является одной из самых популярных, надежных и высокопроизводительных систем управления версиями, предоставляющей гибкие средства нелинейной разработки, базирующиеся на ответвлении и слиянии веток. Для обеспечения целостности истории и устойчивости к изменениям задним числом используются неявное хеширование всей предыдущей истории в каждом коммите, также возможно удостоверение цифровыми подписями разработчиков отдельных тегов и коммитов. По сравнению с прошлым выпуском в новую версию принято 962 изменения, подготовленных при участии 83 разработчика, из которых 26 впервые приняли участие в разработке.
- Добавлен код для обнаружения на стадии выполнения "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_DIR/config));
- Маска '**', указанная без слеша с одной из сторон, которая считалась некорректной, теперь воспринимается как маска для определения наличия двух символов звездочка;
- Реализации команд "git submodule update", "git rebase" и "git rebase -i" полностью переписаны на языке Си. Проведена чистка кода, используемого для команд "git status" и "git commit --dry-run";
- Обеспечена возможность параллельного чтения индексных файлов для повышения производительности. Увеличена эффективность обхода дерева репозитория при извлечении веток и операциях слияния. Внесены оптимизации при частичном клонировании, связанные с кэшированием.