분산 소스 제어 시스템 Git 2.24 출시

사용 가능 분산 소스 제어 시스템 출시 힘내 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» операции выполняются над представлением истории в форме непрерывного потока.

    Фильтрация истории осуществляется при помощи опции «-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

코멘트를 추가