Темы



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

Коротко сгенерировано ИИ по тексту статьи
  • В Git 2.56 вошли 748 изменений от 104 разработчиков, 39 из которых впервые участвовали в разработке.
  • Режим `git add --resolved` проверяет конфликтующие файлы на маркеры и не индексирует их, если хотя бы в одном маркеры остались.
  • В репозитории Chromium команда `git diff` с индексом из 500 тысяч элементов стала выполняться за 0,07 секунды вместо 8 минут.

Почему это важно: Новый режим позволяет безопасно завершать слияние, даже если в рабочем каталоге есть другие незавершённые правки.

Представлен релиз распределенной системы управления исходными текстами Git 2.56. Код Git распространяется под лицензией GPLv2+. По сравнению с прошлым выпуском в новую версию принято 748 изменений, подготовленных при участии 104 разработчиков, 39 из которых впервые приняли участие в разработке Git. Основные новшества (1, 2, 3):

  • Добавлен режим «git add --resolved» для разрешения конфликтов при слиянии веток, который проверяет файлы на наличие маркеров конфликта и при выявлении маркера хотя бы в одном файле выдаёт ошибку, не индексирует ни один из файлов и показывает список файлов требующих исправления. В отличие от команды «git add --update» в новом режиме обрабатываются только файлы, находящиеся в состоянии конфликта, а не связанные с конфликтом изменённые файлы игнорируются, что позволяет безопасно завершать слияние веток, даже если в рабочем каталоге находятся другие незавершённые правки (команда «git add --update» добавляла в индекс все ранее отслеживаемые изменённые файлы в рабочем каталоге).

  • Значительно ускорена работа с большими репозиториями, за счёт оптимизации алгоритма поиска последних общих коммитов при слиянии веток и сравнении коммитов. В процессе работы теперь учитываются коммиты, принадлежащие исключительно одной из веток, что позволяет остановить сканирование сразу после обнаружения всех возможных общих предков, не тратя время на дальнейший перебор истории изменений. В одном из протестированных репозиториев скорость поиска выросла в среднем в 20 раз, а в другом ускорение достигало 70 раз. При выполнении команды «git merge-base --all v4.8 v4.9» в репозитории с ядром Linux количество шагов обхода уменьшилось со 167 тысяч до 3.8 тысяч.

  • Для серверного применения адаптирован режим перепаковки »--path-walk», позволяющий создавать более компактные pack-файлы за счёт группировки объектов по их пути в дереве каталогов (например, для репозитория Fluent UI использование »--path-walk» позволило уменьшить размер pack-файла с 558 МБ до 164 МБ). В новой версии реализована возможность использования режима »--path-walk» совместно с битовыми картами достижимости (reachability bitmap) и дельта-островами (delta island), применяемыми git-хостингами для ускорения работы и изоляции форков от основного репозитория.

  • Устранены узкие места, приводившие к избыточным вычислениям в больших репозиториях: убраны лишние проверки состояния файлов при записи в reftable; исключено повторное сканирование списка при каждой вставке нового pack-файла; ускорены операции с reftable, в которых накопилось много записей об удалении; оптимизирована работа «git diff» при указании ограничений по файловым путям. После внесения оптимизаций работа с reftable при большом числе удалений ускорилась в 65 раз (с 13 секунд до 0.2 секунды), а выполнение проблемной команды «git diff» в репозитории Chromium с 500000 элементами в индексе стало занимать 0.07 секунд вместо 8 минут.

  • В экспериментальную команду «git history», предоставляющую возможности для перезаписи истории изменений, добавлена операция «git history drop» для удаления выбранного коммита с автоматическим прикреплением его потомков к родительскому коммиту.

  • Добавлена команда «git branch --delete-merged 'origin/*' 'topic-*'» для безопасного удаления групп локальных веток, изменения из которых уже переданы во внешний репозиторий. Для фильтрации веток и репозиториев допускается использование масок. Для анализа претендентов на удаление, без фактического выполнения операции, можно использовать флаг »--dry-run».

  • Добавлена команда «git refs create|update|delete|rename», в которой объединены низкоуровневые операции для создания, удаления, переименования и обновления ссылок.

  • В команду «git bisect run» добавлена опция »--reset-when-found=[‹where›]», которая автоматически возвращает репозиторий в состояние до начала поиска или оставляет активным проблемный коммит, без необходимости отдельного запуска команды «git bisect reset».

  • В команду «git replay» добавлен флаг »--linearize» для использования плоской топологии слияния, по аналогии с «git rebase --no-rebase-merges», но без обращения к рабочему дереву.

  • В команде «git log --follow» реализовано отслеживание переименования файлов в нелинейной истории изменений, например, при слиянии подветок. Путь к файлу теперь фиксируется отдельно для каждого родительского коммита, что делает результат независимым от порядка обхода истории коммитов.

  • Добавлена возможность применения команды «git repack -a --filter=blob: limit=1m --drop-filtered» для удаления больших blob-объектов, загруженных на лету (on demand) из внешнего репозитория и не используемых в текущем индексе. При обращении к этим объектам в дальнейшем они будут автоматически повторно загружены.

  • В команде «git log --graph» для графов с несколькими независимыми корнями реализовано добавление отступов для наглядного отделения несвязанных коммитов.

  • Обеспечено выявление типовых опечаток, таких как указание «git push origin/main» вместо «git push origin main» или «git branch --set-upstream-to origin main» вместо «git branch --set-upstream-to=origin/main», и вывод подсказки по использованию корректного варианта.



Источник: http://www.opennet.ru/opennews/art.shtml? num=66362

© OpenNet

Об этом также пишут

  • Linux.org.ru Git 2.56