分散ソース管理システム Git 2.24 をリリース

利用可能 分散ソース管理システムのリリース Git 2.24.0。 Git は最も人気があり、信頼性が高く、高性能のバージョン管理システムの XNUMX つであり、分岐とマージに基づいた柔軟な非線形開発ツールを提供します。 履歴の整合性と遡及的変更への耐性を確保するために、各コミットで以前の履歴全体の暗黙的なハッシュが使用されます。また、開発者のデジタル署名を使用して個々のタグとコミットを認証することもできます。

以前のリリースと比較して、新しいバージョンには 544 件の変更が含まれており、78 人の開発者の参加によって準備され、そのうち 21 人が初めて開発に参加しました。 メイン イノベーション:

  • Добавлена поддержка макросов конфигурации, через которые можно быстро переключаться между разными наборами настроек, не вдаваясь в детали связанных с ними конкретных опций. При помощи макросов нет необходимости запоминать какие именно настройки нужно поменять для активации той или иной функциональности. Например, в случае замедления работы с крупным репозиторием может потребоваться перейти на новый механизм индексации, включить сжатие префиксов путей и задействовать кэш неотслеживаемых файлов, выставив параметр index.version в значение 4 и активировав core.untrackedCache. Макросы позволяют не тратить время на поиск нужного решения в документации, а сразу активировать настройки с оптимизациями для репозиториев с большим числом файлов:

    git config feature.manyFiles true

  • Включено по умолчанию хранение объектов в форме графа коммитов (commit-graph), при котором для индексации используется не линейный список хэшей объектов со ссылками на другие объекты, а структура в виде графа. Если раньше для определения релизов в которых содержится определённое исправление требовалась загрузка каждого объекта с диска для поиска ссылок, то при хранении в виде графа можно сразу определить все необходимые связи. Перевод на хранения в виде графа коммитов в репозиториях ядра Linux и Git позволил добиться почти двухкратного увеличения производительности операций с ветками. Для активации нового метода хранения после обновления до Git 2.24 следует выполнить команду «git gc».

    Из изменений, связанных с commit-graph, также отмечается приведение к единому с другими командами виду реализации индикатора прогресса выполнения операции в связанных с commit-graph командах («git commit-graph write», «git commit-graph verify» и т.п.). Индикатор прогресса теперь по умолчанию выводится только для терминала (для изменения поведения следует использовать опцию «-[no-]progress»). Кроме того, добавлен новый конфигурационный параметр fetch.writeCommitGraph, включающий автоматическое обновление файла с графом коммитов при операциях «git fetch» (все извлекаемые из внешних репозиториев коммиты будут сразу попадать в commit-graph без необходимости отдельного запуска auto-gc);

  • Добавлена команда для перезаписи истории изменений — «gitfilter-リポジトリ«, которая является более простой альтернативой команде «gitfilter-branch» для выполнение операций с историей изменений в репозитории (например, удаление файла из репозитория или извлечение истории изменений определённого каталога). Для повышения эффективности вместо упорядоченного покоммитного разбора в «git filter-repo» операции выполняются над представлением истории в форме непрерывного потока.

    Фильтрация истории осуществляется при помощи опции «-path-{glob,regex}», позволяющей применять как простые маски, так и регулярные выражения. Также имеются опции для выполнения операции «поиск и замена» или чистки бинарных объектов, размер которых превышает заданный. Каждый переписанный коммит снабжается новым хэш-идентификатором SHA-1 и в соответствии с новым идентификатором обновляются все ссылки на заменённый коммит.

    Для вывода сводки со статистикой о репозитории (число объектов по типам, самые крупные файлы и каталоги, какие расширения требуют больше места на диске и т.п.) предусмотрена опция «-analyze». Для расширения функциональности имеется возможность подключения произвольных callback-обработчиков на языке Python, через которые можно как создавать новые подкоманды, так и обрабатывать различные события (например, новые типы файлов);

  • Добавлена опция «—end-of-options», позволяющая отделить опции от имён ссылок, которые могут начинаться с символа «-» и восприниматься как опции («git log —end-of-options —super-dangerous-option»). Если в обиходе подобные имена можно экранировать как «git log ‘refs/heads/—super-dangerous-option'», то в скриптах могли возникнуть проблемы с определением пространства имён. Общепринятый разделитель » — » в этом случае не применим, так как уже используется для отделения имён ссылок от файлов (например, «git log —end-of-options —super-dangerous-option ^master — path/to/file»);
  • В «git rebase —rebase-merges» добавлены опуции «—strategy» и «—strategy-option» для выбора стратегии слияния;
  • Добавлен новый обработчик «.git/hooks/pre-merge-commit», вызываемый после выполнения слияния, но до записи результирующего коммита;
  • В движок автодополнения команд добавлена поддержка дополнения конфигурационных переменных в привязке к настройкам конкретных команд.
    Например, при необходимости набрать «git -c core.autocrlf=false add path/to/my/file», но не помня точного названия переменной «core.autocrlf», можно нажать Tab и получить подсказку.

Кроме того, разработчики Git 追加した кодекс поведения участника проекта, определяющий основные принципы разрешения конфликтных ситуаций. Документ основан на рекомендациях «寄稿者規約«, применяемых во многих открытых проектах, включая ядро Linux, Eclipse, Freedesktop, GitLab, Ruby и Kubernetes. Документ определяет равные возможности для всех участников, независимо от их мировоззрения, возраста, пола, религиозных предпочтений, уровня образования, социального статуса и национальности. В сообществе приветствуется дружелюбная форма общения, понимание, сопереживание проблемам других участников, восприятие конструктивной критики, принятие наилучших для всего сообщества решений. Не допускаются троллинг, оскорбительная манера общения, попытки унижения, домогательства, нарушения неприкосновенности частной жизни, разглашение персональных сведений, а также другие действия, которые могут считаться неуместными при профессиональном общении.

出所: オープンネット.ru

コメントを追加します