Выпуск распределенной системы управления исходными текстами Git 2.24
4 ноября 2019 года
![](http://upload.wikimedia.org/wikipedia/commons/thumb/2/27/Wikinews-logo-ru.svg/300px-Wikinews-logo-ru.svg.png)
Доступен выпуск распределенной системы управления исходными текстами 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. Документ определяет равные возможности для всех участников, независимо от их мировоззрения, возраста, пола, религиозных предпочтений, уровня образования, социального статуса и национальности. В сообществе приветствуется дружелюбная форма общения, понимание, сопереживание проблемам других участников, восприятие конструктивной критики, принятие наилучших для всего сообщества решений. Не допускаются троллинг, оскорбительная манера общения, попытки унижения, домогательства, нарушения неприкосновенности частной жизни, разглашение персональных сведений, а также другие действия, которые могут считаться неуместными при профессиональном общении.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.