Выпуск распределенной системы управления исходными текстами 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. Документ определяет равные возможности для всех участников, независимо от их мировоззрения, возраста, пола, религиозных предпочтений, уровня образования, социального статуса и национальности. В сообществе приветствуется дружелюбная форма общения, понимание, сопереживание проблемам других участников, восприятие конструктивной критики, принятие наилучших для всего сообщества решений. Не допускаются троллинг, оскорбительная манера общения, попытки унижения, домогательства, нарушения неприкосновенности частной жизни, разглашение персональных сведений, а также другие действия, которые могут считаться неуместными при профессиональном общении.
Источник: http://www.opennet.ru/opennews/art.shtml? num=51810
© OpenNet