Темы



Git 2.56

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

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

1000px.jpg

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

Основные новшества (github.blog, gitlab.com/blog, gitlab.com/git-scm):

  • Добавлен режим 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=[], которая автоматически возвращает репозиторий в состояние до начала поиска или оставляет активным проблемный коммит, без необходимости отдельного запуска команды 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, и вывод подсказки по использованию корректного варианта.

>>> Источник: OpenNET

©  Linux.org.ru

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