Выпуск распределенной системы управления исходными текстами Git 2.7.0

После трёх месяцев разработки представлен релиз распределенной системы управления исходными текстами Git 2.7.0. Git является одной из самых популярных, надёжных и высокопроизводительных систем управления версиями, предоставляющей гибкие средства нелинейной разработки, базирующиеся на ответвлении и слиянии веток. Для обеспечения целостности истории и устойчивости к изменениям задним числом используются неявное хеширование всей предыдущей истории в каждом коммите, также возможно удостоверение цифровыми подписями разработчиков отдельных тегов и коммитов. Из проектов, разрабатываемых с использованием Git, можно отметить ядро Linux, Android, LibreOffice, Systemd, X.Org, Wayland, Mesa, Gstreamer, Wine, Debian, DragonFly BSD, Perl, Eclipse, GNOME, KDE, Qt, Ruby on Rails, PostgreSQL, VideoLAN, PHP, Xen, Minix.

По сравнению с прошлым выпуском в новую версию принято 539 изменений, подготовленные при участии 81 разработчика, из которых 26 впервые приняли своё участие в разработке. Основные изменения:

  • Реализация нейтральной схемы заданий начальных и конечных версий в «git bisect». Изначально, так как «git bisect» создавался для выявления ревизии, в которой возникло регрессивное изменение, заведомо рабочая версия помечалась ключём «good», а версия в которой проявляется проблема — «bad». Подобное наименование вызывает замешательство при использовании «git bisect» для поиска коммита вызвавшего изменения, не связанные с ошибками, например, для выявления ревизии в которой появилась новая функциональность или была исправлена ошибка.

    Для того чтобы исключить двойное трактование в git 2.7 представлена новая схема пометки начальной и конечной точек для рецензирования: конечная точка теперь может помечаться ключом «old» (вместо good), а начальная — «new» (вместо bad). Кроме того, имена ключей можно переопределить при помощи опций »--term-old» и »--term-new». Например, при поиске момента появления проблемы с производительностью, замеченной в ветке master, но отсутствующей в v4.2, можно выполнить:

         git bisect start --term-old=fast --term-new=slow     $ git bisect fast v4.2     $ git bisect slow master  
  • В «git push» добавлена возможность определения базовой конфигурации опции »--recurse-submodules». Например, чтобы каждый раз не запускать «git push --recurse-submodules=on-demand origin» можно внести изменения в конфигурацию по умолчанию — «git config push.recurseSubmodules on-demand», после чего выполнять «git push origin» не заботясь о субмодулях. Для временного отключения сохранённых параметров в командной строке можно указать »--no-recurse-submodules»;
  • Расширение возможностей команды «git worktree», позволяющей создать несколько рабочих копий, привязанных к одному локальному Git-репозиторию. В новом выпуске представлена новая команда «git worktree list», позволяющая просмотреть рабочие копии текущего репозитория и доступные в них ветки. Появилась возможность одновременного создания разных сеансов «git bisect» для разных рабочих копий, созданных через «git worktree add». Добавлена поддержка клонирования из любой привязанной рабочей копии. Улучшена поддержка субмодулей для рабочих копий;
  • В «git p4», прослойку для помещения и извлечения изменений между Git и репозиториями Perforce, добавлена поддержка хранилища больших файлов LFS («Git Large File Storage»). Новая возможность позволяет сохранять полученные из Perforce большие файлы (например, мультимедийные материалы) отдельно от основного Git-репозитория, чтобы избежать чрезмерного расходования дискового пространства;
  • Проведена унификация команд для вывода ссылок. В Git предлагается три разных способа просмотра списков ссылок: git branch для вывода веток, git tag для вывода тегов и git for-each-ref для вывода ссылок на произвольные объекты. Проблема в том, что каждая из этих команд имеет свои особенности и отличается на уровне опций. В Git 2.7 для всех из этих команд предложен единый набор базовых опций, параметров форматирования вывода и сортировки. Например, добавлены следующие общие опции:
    • --points-at object — вывод любых ссылок, связанных с указанным объектом;
    • --merged [commit] — вывод только тех ссылок, которые прикреплены к коммиту (по умолчанию HEAD);
    • --no-merged [commit]: — вывод только тех ссылок, которые не прикреплены к коммиту (по умолчанию HEAD);
    • --contains [commit]: — вывод только тех ссылок, которые включают заданных коммит (по умолчанию HEAD).
  • В «git stash show» добавлена поддержка параметров конфигурацииstash.showPatch и stash.showDiff, определяющих правила показа записей по умолчанию;
  • В «git blame» обеспечена корректная работа с опцией »--first-parent» и при одновременном использовании опций »--reverse» и »--first-parent»;
  • В gitk улучшена работа на системах с экранами высокого разрешения (highDPI);
  • Устранены уязвимости: целочисленной переполнение в коде оценки изменений (diff) и неограниченное рекурсивное извлечение субмодулей. Пользователям рекомендуется обновить Git до версий Git 2.3.10, 2.4.10, 2.5.4, 2.6.1 или 2.7.0.

© OpenNet