發布分佈式源代碼控制系統 Git 2.24

可用的 發布分散式原始碼控制系統 Git 2.24.0。 Git 是最受歡迎、可靠和高效能的版本控制系統之一,提供基於分支和合併的靈活的非線性開發工具。 為了確保歷史記錄的完整性和對追溯更改的抵抗力,在每次提交中都會使用整個先前歷史記錄的隱式哈希;還可以使用開發人員的數位簽名來驗證各個標籤和提交。

與先前版本相比,新版本包含 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);

  • Добавлена команда для перезаписи истории изменений — «git filter-repo«, которая является более простой альтернативой команде «git filter-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 添加 кодекс поведения участника проекта, определяющий основные принципы разрешения конфликтных ситуаций. Документ основан на рекомендациях «Contributor Covenant«, применяемых во многих открытых проектах, включая ядро Linux, Eclipse, Freedesktop, GitLab, Ruby и Kubernetes. Документ определяет равные возможности для всех участников, независимо от их мировоззрения, возраста, пола, религиозных предпочтений, уровня образования, социального статуса и национальности. В сообществе приветствуется дружелюбная форма общения, понимание, сопереживание проблемам других участников, восприятие конструктивной критики, принятие наилучших для всего сообщества решений. Не допускаются троллинг, оскорбительная манера общения, попытки унижения, домогательства, нарушения неприкосновенности частной жизни, разглашение персональных сведений, а также другие действия, которые могут считаться неуместными при профессиональном общении.

來源: opennet.ru

添加評論