Доступен релиз распределенной системы управления исходными текстами Git 1.8.2. 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.
Из изменений в Git 1.8.2 можно отметить:
- Начальная поддержка платформ QNX и z/OS UNIX System Services;
- Добавлена подсветка вывода результатов выполнения тестов: зелёным помечены пройденные без ошибок тесты, красным — тесты при выполнении которых возникли проблемы, желтым — выполнение которых вызывает вопросы, синим — информативные результаты;
- Проведена унификация наименований в документации. Для продукта и связанных с ним технологий рекомендуется использовать имя Git. В контексте выполнения конкретных команд указывается git. Имя GIT не рекомендовано для использования;
- Дополнительный скрипт (contrib/completion), применяемый в системе автодополнения для предложения вариантов часто используемых путей, модифицирован для более точного соответствия предложений особенностям тех или иных команд (например для «git add» не предлагаются немодифицированные пути);
- При задании шаблона в файлах .gitignore и .gitattributes теперь допустимо использовать маску «**/» для допустимости нулевого и более высокого уровня вложенности поддиректории. Т.е. «foo/**/bar» сработает как при наличии bar в директории foo так и если bar находится в поддиректории директории foo;
- Разделитель аргументов и путей в командной строке «—» теперь не обязательно использовать для маски пути «:/», например, вместо «git cmd — :/» можно указать «git cmd :/».
- В «git blame» и «git diff» добавлена поддержка опции «—no-follow»;
- Для помощи в отладке файлов .gitignore добавлена новая команда «git check-ignore»;
- Команда «git cherry-pick» теперь может применяться для повтора корневого коммита для несозданной ветки;
- В конфигурацию добавлены переменные commit.cleanup = ‘whitespace’ и setting diff.algorithm для использования опции —cleanup=whitespace в «git commit» и выбора нестандартного алгоритма для команды «git diff»;
- В команду «git format-patch» добавлена опция «-v $count», при указании которой к именам файлов с сохраняемыми патчами добавляется строка «v$count-» и в файлах используется префикс «PATCH v$count», что позволяет сохранять патчи под разными именами;
- В команды, подобные «git log», добавлена опция «—use-mailmap» для перезаписи имён и адресов в соответствии с механизмом mailmap;
- При указании «git log —cc —graph» теперь отображается вывод отличий, комбинированный с графом предков;
- В «git mergetool» и «git difftool» обеспечен вывод списка доступных бэкендов в более непротиворечивой форме;
- Для обновления тега через «git push» теперь нужно всегда указывать опцию «-f» (—force);
- Обновлена реализация команды «git fast-export», которую теперь допустимо использовать в контексте интерфейса внешних хелперов;
- В директорию contrib/ добавлен внешний хэлпер для взаимодействия с репозиториями bzr;
- В реализацию «git p4» внесена большая порция исправлений, связанных с обработкой веток. Обеспечена поддержка использования с Python 2.4/2.5 и решены проблемы с совместимостью с окружением Cygwin;
- В «git fsck» добавлена проверка на наличие в дереве объектов, которых там быть не должно (например, «.», «.git» и «..»);
- Проведена оптимизация кода сопоставления путей, содержащих маски;
- Переработана и ускорена реализация команды «git reset»;
- Обновлена реализация команды «imap-send», в которой задействован уже используемый в команде http-push код квотинга XML;
- Добавлена возможность сборки с опцией USE_WILDMATCH=YesPlease, активирующей альтернативную реализацию логики сопоставления шаблонов для ссылок и путей в репозитории. Основное отличие новой реализации в поддержке маски «**/» для многоуровневых путей («refs/**/master» сработает для «refs/heads/master» и «refs/remotes/origin/master»).
В анонсе также отмечается, что начиная с выпуска Git 2.0 будет изменено поведение команды «git push» по умолчанию. В ситуации когда при выполнении «git push» явно не указано что именно помещать в репозиторий ранее использовалась семантика «matching», при которой для обновления выбирались все внешние ветки и теги с именами, совпадающими с локальными. В будущем поведение будет изменено и по умолчанию будет применяться семантика «simple», при которой изменения отправляются только из текущей ветки в ветку с тем же именем, в случае если локальная ветка назначена для интеграции с удалённой веткой. Переопределить новое поведение можно через конфигурационную переменную «push.default».
При неуказании добавляемых путей при выполнении «git add -u» и «git add -A», начиная с версии Git 2.0 данные команды будут применяться для всего репозитория, а не иерархии относительно текущей поддиректории, что соответствует поведению «git commit -a» и других похожих команд. Для распространения действия только начиная с текущей директории следует явно указывать текущий путь, например, «git add -u .».