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

Материал из Викиновостей, свободного источника новостей

14 января 2020 года

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

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

  • Приближается к стабилизации и полной готовности возможность частичного клонирования (partial clones), позволяющая переносить лишь часть данных и работать с неполной копией репозитория. При обычном клонировании из репозитория копируются все данные, включая каждую версию каждого файла из истории изменений. Для очень больших репозиториев копирование данных приводит к значительному увеличению трафика и дискового пространства, даже если разработчика интересует лишь подмножество файлов. Для упрощения получения только части рабочего дерева исходных текстов в новом выпуске предложена экспериментальная команда "sparse-checkout" и новая опция "--sparse" для команды "clone".

Ранее процесс выборочного клонирования производился через задание фильтров для отсеивания лишнего контента и опции "--no-checkout" для отключения восполнения недостающих файлов. После этого, перед выполнением операции checkout, требовалось включить настройку core.sparseCheckout и определить в файле .git/info/sparse-checkout список шаблонов исключаемых путей. Например, для клонирования без блобов и запрета извлечения файлов из вложенных каталогов глубиной 2 и больше можно было выполнить:


git clone --filter=blob:none --no-checkout /your/repository/here repo
$ cd repo
$ cat >.git/info/sparse-checkout <EOF
/!/EOF
$ git config core.sparseCheckout 1
$ git checkout .

Новая команда "git sparse-checkout" существенно упрощает работу и сводит процесс организации работы с неполным репозиторием к командам:


git clone --filter=blob:none --sparse /your/repository/here repo
git sparse-checkout set /path/to/check/out

Команда sparse-checkout позволяет установить список путей для checkout (set) без ручной настройки .git/info/sparse-checkout, а также вывести текущий список путей (list) и включить или отключить частичные checkout (enable/disable).

Для оптимизации работы с очень большими репозиториями и списками шаблонов предложена настройка "git config core.sparseCheckoutCone", ограничивающая допустимые шаблоны (вместо произвольных шаблонов .gitignore можно задать все ли пути и все ли файлы в заданном подкаталоге следует извлекать). Например, если в большом репозитории есть каталог "A/B/C" и вся работа сосредоточена в подкаталоге "C", то при включении режима sparseCheckoutCone команда "git sparse-checkout set A/B/C" извлечёт содержимое "C" полностью, но из "A" и "B" извлечёт только необходимые для работы с "C" части.

  • Из документации ("git rebase -h") удалены все упоминания опции "--preserve-merges", которая объявлена устаревшей и вместо неё для переноса набора коммитов следует использовать " git rebase --rebase-merges".
  • Для улучшения читаемости сообщений с патчами, отправляемыми в списки рассылки, добавлена опция "git format-patch --cover-from-description subject", при указании которой в качестве темы сопроводительного письма для набора патчей используется первый абзац из текста описания ветки.
  • Реализована поддержка совместного применения команды "git apply --3way" и настройки "merge.conflictStyle" ("git apply" теперь учитывает стиль описания конфликта из merge.conflictStyle при необходимости разрешения конфликта после попытки применения файла с патчем к репозиторию).
  • Код определения функций, используемый в таких операциях как "git diff/grep --show-function/--function-context", расширен поддержкой определения границ функций в программах на языке Elixir.
  • В "git add", "git commit", "git reset" и другие команды добавлена новая опция "--pathspec-from-file", дающая возможность загрузить список путей из файла или входного потока, вместо их перечисления в командной строке.
  • Решена проблема с определением переименований на уровне каталогов при записи коммитов. Определение не работало в случае перемещения содержимого подкаталога в корень репозитория.
  • Предложена начальная реализация переработанной команды "git add -i", позволяющей добавлять изменённое содержимое в интерактивном режиме, переписанная с Perl на Си. Ведётся аналогичная переработка команды "git add -p".
  • Проведён рефакторинг команды "git log --graph", формирующей ASCII-изображение графа с историей изменений в репозитории. Переработка позволила значительно улучшить и упростить вывод без искажения структуры истории, что, например, решило проблему с вылезанием рисунка за границу ширины строки терминала.
  • Опция "git log --format=..", позволяющая изменить формат вывода,

расширена поддержкой флагов "l/L" для вывода только части email-адреса, указываемой перед символом "@" (например, полезно, когда у всех разработчиков все email в одном домене).

  • В команду "git submodule" добавлена подкоманда "set-url".
  • Тестовые наборы обновлены в рамках подготовки к переходу на

алгоритм хэширования SHA-2 вместо SHA-1.

Источники[править]


Creative Commons
Creative Commons
Эта статья содержит материалы из статьи «Выпуск распределенной системы управления исходными текстами Git 2.25», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии[править]

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.