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

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

Наиболее важным нововведением Git 2.18 является интеграция поддержки второй версии коммуникационного протокола Git, который используется при удалённом подключении клиента к Git-серверу. Вторая версия протокола примечательна предоставлением возможности фильтрации веток и тегов на стороне сервера (ранее при выполнении любой команды извлечения клиенту всегда отправлялся полный список ссылок во всём репозитории, даже когда клиент обновлял только одну ветку) и добавлением средств для расширения протокола (добавления в протокол новых возможностей по мере появления в инструментарие новой функциональности). Подробнее о второй версии протокола можно прочитать в отдельном анонсе.

Другие изменения:

  • При выполнении слияний и операций «cherry-pick» добавлена эвристика для предугадывания переименований. Например, если x/a, x/b и x/c были переименованы в z/a, z/b и z/c, то наиболее вероятно, что пользователь также переименует x/d в z/d, и можно предложить сразу переместить все остальные элементы каталога 'x' в каталог 'z'. Попутно в коде переименования устранена ошибка, которая могла приводить к перезаписи не включённых в репозиторий файлов во время слияния;
  • В «git filter-branch» добавлен отдельный код возврата для отделения ситуации отсутствия новых коммитов для перезаписи от ошибок при выполнении операции;
  • При сборке со свежей библиотекой cURL обеспечена возможность использования TLS 1.3 и сжатия методом gzip;
  • В «git gui» добавлено распознавание файлов »~/.ssh/id_ecdsa.pub» и »~/.ssh/id_ed25519.pub» как SSH-ключей. В дополнение к CTRL/CMD+ENTER для коммита добавлена клавиатурная комбинация CTRL/CMD+KP_ENTER (аналог с нажатием Enter на боковом цифровом блоке клавиатуры). Решены проблемы с использованием старых версий Tk (например 8.5.7)) без поддержки операции «ttk: style theme use» для выбора темы оформления;
  • В «git rebase» добавлена обработка опции »--signoff» при использовании бэкендов, отличных от «am» (но вызванных без »--preserve-merges»);
  • Выполнение «git branch --list» во время прерванной операции «rebase -i» теперь разделяет ситуации, когда rebase выполнен для отсоединённой ветки HEAD и обычной ветки;
  • В «git mergetools» обеспечена совместимость с утилитой guiffy;
  • Добавлен новый атрибут «working-tree-encoding», который указывает Git выполнить перекодирование содержимого в соответствии с заданной кодировкой текста при выполнении операции checkout;
  • В «git config» добавлена универсальная опция »--type=typename» для указания типов задаваемых значений, дополняющая раздельные опции »--int»,»--bool» и т.п. В «git config» также обавлен новый тип значений »--type=color» и опция »--default», например, можно указать «git config --get foo.color --default blue» и получить значение цвета из переменной foo.color или вывести цвет «blue» если данная переменная не определена;
  • В «git rebase» добавлена опция »--rebase-merges» для переноса всей топологии графа коммитов;
  • В «git worktree add» добавлена поддержка выполнения операции checkout над существующей веткой;
  • В «git send-email» помимо ранее доступных опций диалога подтверждения ('Yes', 'No', 'Quit', 'All') добавлена кнопка 'Edit' для редактирования перед отправкой;
  • По умолчанию в настройках отключён режим «merge.renames» для экономии ресурсов процессора, которые попусту тратятся на поиск и слияние переименованных путей. В «git status» добавлена настройка status.renames для отключения кода определения переименований;
  • Улучшена работа скрипта автодополнения ввода, в частности, для различных команд обеспечено автодополнение файловых путей;
  • По умолчанию обеспечена поддержка сборки с библиотекой PCRE v2. Для явного выбора версии PCRE следует использовать опции USE_LIBPCRE1 и USE_LIBPCRE2;
  • Добавлена сборочная опция, позволяющая при запуске Git вызывать все связанные компоненты с использованием относительных путей (ранее данный режим применялся для Windows, но теперь доступен и для Linux, BSD и macOS);
  • Абстрагирован интерфейс взаимодейтсвия с GPG с целью обеспечения в будущем интеграции с другими типами систем формирования цифровых подписей;
  • Обеспечена более заметная подсветка ошибок при выполнении «git push»;
  • Проведена оптимизация производительности операций «git fetch», «git gc» и «git pack-objects»;
  • Прекращена поддержка операции извлечения коммитов «git http-fetch», которая была помечена устаревшей и никем не использовалась;

© OpenNet