Доступна система управления исходными текстами Git 2.42
После двух с половиной месяцев разработки опубликован выпуск распределенной системы управления исходными текстами Git 2.42. Git является одной из самых популярных, надёжных и высокопроизводительных систем управления версиями, предоставляющей гибкие средства нелинейной разработки, базирующиеся на ответвлении и слиянии веток. Для обеспечения целостности истории и устойчивости к изменениям «задним числом» используются неявное хеширование всей предыдущей истории в каждом коммите, также возможно удостоверение цифровыми подписями разработчиков отдельных тегов и коммитов.
По сравнению с прошлым выпуском в новую версию принято 453 изменения, подготовленные при участии 78 разработчиков, из которых 17 впервые приняли участие в разработке. Основные новшества:
- Предложен новый алгоритм обхода битовых карт (дисковая структура «reachability bitmaps»), отражающих данные о наборах объектов, доступных для каждого коммита, и позволяющих быстро определить наличие базового объекта для сокращения времени извлечения данных при выполнении таких операций, как «git fetch», «git rev-list» и «git clone» с большими репозиториями. Новый алгоритм обеспечивает заметный прирост производительности в условиях, когда битовая карта полностью не покрывает одну из сравниваемых веток. В некоторых ситуациях применение нового алгоритма может привести к ускорению в 2–15 раз. Для переключения на новый алгоритм следует выставить параметр pack.useBitmapBoundaryTraversal и перепаковать индексы, после чего использовать опцию »--use-bitmap-index» при выполнении «git rev-list»:
git repack -ad --write-bitmap-index git config pack.useBitmapBoundaryTraversal true git rev-list --count --objects --tags --not --branches --use-bitmap-index
В команде «git for-each-ref» реализован гибкий механизм исключения ссылок из вывода, более удобный и эффективный, чем применение переменной «transfer.hideRefs». Вместо поштучной проверки исключаемых ссылок, новый метод определяет начало и конец каждого исключаемого диапазона, и пропускает их в процессе разбора файла packed-refs. Шаблон для исключения задаётся при помощи новой опции »--exclude». Дополнительно добавлена опция »--include», которая позволяет вернуть отдельные части из исключаемого диапазона. Новый механизм также задействован для формирования списка заявленных для передачи ссылок во время выполнения операции push, при этом в тестах, охватывающих большие списки исключений, применение нового алгоритма позволяло до 20 раз снизить нагрузку на CPU.
Добавлен новый механизм для сохранения недостижимых объектов (unreachable object), на которые в репозитории отсутствуют ссылки (не ссылаются ветки или теги) и которые подлежат удалению сборщиком мусора после истечения таймаута. Для сохранения недостижимых объектов добавлен параметр gc.recentObjectsHook («git config gc.recentObjectsHook /path/to/your/program»), позволяющий настроить вызов внешней программы перед началом сборки мусора («git gc --prune=‹approxidate›»). Указанная в параметре gc.recentObjectsHook программа возвращает список идентификаторов объектов, которые будут защищены от удаления сборщиком мусора, независимо от времени их нахождения в репозитории.
Расширено применение механизма частичных индексов (sparse index), охватывающих лишь часть репозитория. Частичные индексы позволяют повысить производительность и сэкономить место в репозиториях, в которых выполняются операции частичного клонирования (sparse-checkout) или осуществляется работа с неполной копией репозитория. В новом выпуске на использование частичных индексов переведена команда diff-tree.
В команде for-each-ref расширены средства форматирования ссылок при помощи опции »--format». Появилась возможность вывода информации, связанной с GPG-подписями, например можно отдельно отобразить ключ, слепок ключа и имя разработчика, сформировавшего цифровую подпись.
$ git for-each-ref --format='%(refname) %(signature:key)' \ --sort=v:refname 'refs/remotes/origin/release-*' | tac refs/remotes/origin/release-3.1 4AEE18F83AFDEB23 refs/remotes/origin/release-3.0 4AEE18F83AFDEB23 refs/remotes/origin/release-2.13 4AEE18F83AFDEB23
В команде «git rev-list» при использовании опции »--stdin» для упрощения вызова из скриптов разрешено указание через входной поток данных для расширенных модификаторов, таких как »--branches»,»--tags» и »--remotes», а не только модификаторов, что ссылаются на коммиты по идентификатору объекта.
Реализовано отложенное удаление сообщения $GIT_DIR/TAG_EDITMSG, производимое только после успешной записи тега, что решает проблему удаления примечания до вывода сообщения об ошибке.
В команду «git worktree add» добавлена опция »--orphan» для создания рабочего дерева на основе осиротевшей ветки.
В команду «git cat-file» добавлен режим »-Z», который в отличие от режима »-z» применяет разделение на основе символов с нулевым кодом (вместо символов перевода строки) не только для входных, но и для выходных данных.
В команду «git notes append» добавлена опция '--separator' для выбора разделителя абзацев.
В команде «git diff --no-index» реализована возможность чтения из именованных каналов («git diff ‹(process) ‹(substitution)»).
Источник: http://www.opennet.ru/opennews/art.shtml? num=59639
© OpenNet