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

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

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

По сравнению с прошлым выпуском в новую версию принято 504 изменений, подготовленных при участии 64 разработчиков, из которых 12 впервые приняли участие в разработке. Основные новшества:

  • Осуществлён переход по умолчанию на вторую версию коммуникационного протокола Git, который используется при удалённом подключении клиента к Git-серверу. Вторая версия протокола примечательна предоставлением возможности фильтрации веток и тегов на стороне сервера с отдачей клиенту сокращённого списка ссылок. Ранее при выполнении любой команды извлечения клиенту всегда отправлялся полный список ссылок во всём репозитории, даже когда клиент обновлял только одну ветку или проверял актуальность своей копии репозитория. Другим заметным новшеством является возможность добавления в протокол новых возможностей по мере появления в инструментарии новой функциональности. Код клиента остаётся совместимым со старым протоколом и может продолжать работать как с новыми, так и со старыми серверами, автоматически откатываясь на первую версию, если сервер не поддерживает вторую.
  • В команду «git config» добавлена опция «—show-scope» упрощающая выявление места, в котором определены те или иные настройки. Git позволяет определять настройки в разных местах: в репозитории (.git/info/config), в каталоге пользователя (~/.gitconfig), в общесистемном файле конфигурации (/etc/gitconfig), а также через опции командной строки и переменные окружения. При выполнении «git config» достаточно трудно понять где именно определена искомая настройка. Для решения данной задачи была доступна опция «—show-origin», но она лишь показывает путь к файлу, в котором определена настройка, что полезно при намерении отредактировать файл, но не помогает, если требуется изменить значение через «git config» при помощи опций «—system», «—global» или «—local». Новая опция «—show-scope» отображает контекст определения переменных и может применяться совместно с —show-origin»:
   $ git --list --show-scope --show-origin
   global  file:/home/user/.gitconfig      diff.interhunkcontext=1
   global  file:/home/user/.gitconfig      push.default=current
   [...]
   local   file:.git/config      branch.master.remote=origin
   local   file:.git/config      branch.master.merge=refs/heads/master

   $ git config --show-scope --get-regexp 'diff.*'
   global  diff.statgraphwidth 35
   local   diff.colormoved plain

   $ git config --global --unset diff.statgraphwidth
  • В настройках привязки учётных данных разрешено использование масок в URL. Любые настройки HTTP и учётные данные в Git могут быть установлены как для всех соединений (http.extraHeader, credential.helper), так и для соединений в привязке к URL (credential.https://example.com.helper, credential.https://example.com.helper). До сих пор использование масок, таких как *.example.com, допускалось только для настроек HTTP, но не поддерживалось для привязки учётных данных. В Git 2.26 данные различия устранены и, например, для привязки имени пользователя ко всем поддоменам теперь можно указать:
   [credential "https://*.example.com"]

   username = ttaylorr
  • Продолжено расширение экспериментальной поддержки частичного клонирования (partial clones), позволяющей переносить лишь часть данных и работать с неполной копией репозитория. В новом выпуске добавлена новая команда «git sparse-checkout add», которая позволяет добавлять отдельные директории для применения операции «checkout» лишь к части рабочего дерева, вместо перечисления всех подобных директорий разом через команду «git sparse-checkout set» (можно добавлять по одной директории, без повторного задания всего списка каждый раз). Например, для клонирования репозитория git/git без передачи блобов, ограничения проверки только корневым каталогом рабочей копии и раздельной пометкой для извлечения каталогов «t» и «Documentation», можно указать:
   $ git clone --filter=blob:none --sparse git@github.com:git/git.git

   $ cd git
   $ git sparse-checkout init --cone

   $ git sparse-checkout add t
   ....
   $ git sparse-checkout add Documentation
   ....
   $ git sparse-checkout list
   Documentation
   t
  • Заметно увеличена производительность команды «git grep», применяемой для поиска как в актуальном содержимом репозитория, так и в исторических ревизиях. Для ускорения поиска допускалось сканирование содержимого рабочего дерева с использованием нескольких потоков («git grep —threads»), но поиск в исторических ревизиях был однопоточным. Теперь это ограничение снято за счёт реализации возможности распаралелливания операций чтения из хранилища объектов. По умолчанию число потоков устанавливается равным числу ядер CPU, что в большинстве случаев теперь не требует явного выставления опции «—threads».
  • Добавлена поддержка автодополнения ввода субкоманд, путей, ссылок и прочих аргументов команды «git worktree», позволяющей работать с несколькими рабочими копиями репозитория.
  • Добавлена поддержка ярких цветов, для которых имеются ANSI escape-последовательности. Например, в настройках цветов подсветки «git config —color» или «git diff —color-moved» через опцию «—format» для ярко-голубого можно указывать «%C(brightblue)».
  • Добавлена новая версия скрипта fsmonitor-watchman, обеспечивающего интеграцию с механизмом Facebook Watchman для ускорения отслеживания изменения файлов и появления новых файлов. После обновления git требуется заменить hook в репозитории.
  • Добавлены оптимизации для ускорения операций частичного клонирования (partial clones), связанные с применением битовых карт (bitmap machinery) для избежании полного перебора всех объектов во время фильтрации отдачи. Проверка на блобы (—filter=blob:none и —filter=blob:limit=n) при частичном клонировании теперь производится существенно быстрее. GitHub объявил о применении патчей с данными оптимизациями и экспериментальной поддержке частичного клонирования.
  • Команда «git rebase» переведена на другой бэкенд, использующий по умолчанию механизм ‘merge’ (раньше использовался для «rebase -i») вместо ‘patch+apply’. В некоторых мелочах бэкенды отличаются, например, после продолжения операции после устранения конфликта (git rebase —continue) новый бэкенд предлагает отредактировать сообщение коммита, а старый просто использовал старое сообщение. Для возвращения старого поведения можно использовать опцию «—apply» или установить переменную конфигурации ‘rebase.backend’ в значение ‘apply’.
  • Пример обработчика параметров аутентификации, заданных через .netrc, приведён к виду, пригодному для использования из коробки.
  • Добавлена настройка gpg.minTrustLevel для задания минимального уровня доверия для различных элементов, выполняющих проверку цифровой подписи.
  • В «git rm» и «git stash» добавлена опция «—pathspec-from-file».
  • Продолжено усовершенствование тестовых наборов в рамках подготовки к переходу на алгоритм хэширования SHA-2 вместо SHA-1.
Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии