Доступно обновление Git 2.13

Git 2.13

Доступен выпуск распределенной системы управления версиями Git 2.13.0.

Важное оповещение безопасности

Устранена уязвимость, которая позволяла запустить внешние команды при подключении к репозиторию через SSH в режиме git-shell. В частности, при выполнении git upload-pack --help запускается интерактивный интерфейс для постраничного просмотра подсказки, из которого можно вызвать произвольные программы на стороне удалённой системы. Подробнее об этом можно прочитать в этом анонсе. Конфигурации, не использующие git-shell (например, GitHub и GitHub Enterprise) или использующие git-shell вместе с Gitolite, проблеме не подвержены.

Теперь перейдём к нововведениям.

Распознавание коллизий SHA-1

Добавлен код для выявления в Git-репозиториях известных коллизий в хешах SHA-1, который поможет защититься от возможных атак через подмену репозитория. В дальнейшем планируется избавиться от жёсткой привязки Git от SHA-1 и добавить опциональную поддержку SHA3-256, которая сможет применяться параллельно с SHA-1.

Таким образом, переведённый на SHA3-256 локальный репозиторий сможет взаимодействовать с Git-серверами (как минимум на уровне push/fetch), поддерживающими только SHA-1, а пользователи смогут одновременно использовать идентификаторы объектов SHA-1 и SHA3-256.

Новый метод для распознавания коллизий включён по умолчанию и не будет сильно влиять на производительность.

Более удобные шаблоны файловых путей

Расширены возможности по использованию шаблонов файловых путей в командах git. В частности, добавлен сокращённый оператор для исключения путей ^, который может использоваться вместо выражения :(exclude) и вместо ранее применяемого сокращения !, которое требовало экранирования блока кавычками. Например, если раньше для выполнения выборки файлов с расширениями, отличными от .c, требовалось выполнить:

то сейчас можно упростить конструкцию до

Кроме того, в новой версии представлен оператор :(attr), который позволяет выбрать файлы, соответствующие заданному списку атрибутов. Например, для вывода файлов, хранимых в LFS (хранилище больших бинарных данных) можно выполнить:

При желании можно определить и привязать свои атрибуты и комбинировать attr с другими операторами:

Условная конфигурация

В файлах конфигурации появилась возможность применения условных операторов, через которые можно организовать применение разных опций для разных групп репозиториев путём включения дополнительных блоков конфигурации при наличии определённых файловых путей. Например, можно указать в настройках один email для внутренних рабочих проектов и другой для использования при работе со сторонним открытым кодом, что позволит избежать казусов в случае, если новый репозиторий не был настроен должным образом.

Прочие изменения в Git 2.13

  • В команде git log опция --decorate=auto включена по умолчанию. Теперь коммиты, указывающие непосредственно на ветку или тег, выделяются и выводятся c именем ветки.
  • Код организации вывода в git branch переведён на систему ref-filter, также используемую git for-each-ref и git tag. Это позволяет использовать git branch --format=.
  • В git branch, git tag, и git for-each-ref добавлена опция --no-contains, которая дополняет опцию --contains. Теперь можно запросить теги или ветки, в которых отсутствует определённая ошибка или исправление.
  • git stash теперь может работать с сокращёнными файловыми путями.
  • Специальные названия веток @{upstream}, @{u}, and @{push} теперь нечувствительны к регистру (часто после ввода @ и { первая буква команды вводилась как заглавная).

Конечно, это не все изменения в Git 2.13 — всего было приняно более 700 коммитов. С полным списком можно ознакомиться в примечании к выпуску.

Что такое Git?

Git является одной из самых популярных, надёжных и высокопроизводительных систем управления версиями, предоставляющей гибкие средства нелинейной разработки, базирующиеся на ответвлении и слиянии веток. Для обеспечения целостности истории и устойчивости к изменениям задним числом используются неявное хеширование всей предыдущей истории в каждом коммите, также возможно удостоверение цифровыми подписями разработчиков отдельных тегов и коммитов.

Источник: блог GitHub