Выпуск распределенной системы управления исходными текстами Git 2.25
Доступен выпуск распределенной системы управления исходными текстами 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-checkou» существенно упрощает работу и сводит процесс организации работы с неполным репозиторием к командам:
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» части.
- Из документации удалены все упоминания опции »--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 в одном домене).
Источник: http://www.opennet.ru/opennews/art.shtml? num=52180
© OpenNet