Доступен релиз распределенной системы управления исходными текстами Git 1.9.0. Изменение нумерации ветки связано с внесением незначительных изменений, нарушающих обратную совместимость. Более существенные изменения, связанные с поведением команд "git puth" и "git add", отложены до выпуска Git 2.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.
Изменения в Git 1.9.0, влияющие на обратную совместимость:
- Аргументы "$cmd $args" в команде "git submodule foreach $cmd $args", используемые по аналогии с указанием подобных аргументов в ssh, теперь передаются напрямую без выполнения через командный интерпретатор, что позволяет избежать непредсказуемого результата, если пользователь забудет экранировать данные в блоке $args;
- Прекращена поддержка работающего в режиме только для чтения экспериментального формата несвязанных объектов (loose-object);
- Изменено действие опции "--tags" в команде "git fetch", которая теперь приводит к извлечению не только тегов, но и данных, извлекаемых как при использовании команды без опции "--tags" (ранее при указании "--tags" извлекались только теги);
- Расширен способ интерпретации аргумента $what в команде "git push $there $what", в ситуации когда, через двоеточие явно не определено, какая ссылка в репозитории $there должна быть обновлена;
- Прекращена поддержка серии давно устаревших команд: repo-config, tar-tree, lost-found и peek-remote.
Среди других изменений в Git 1.9.0:
- Поддержка ответа "100 Continue" при GSS-Negotiate для того, чтобы избежать повторной пересылки больших объёмов данных при использовании HTTP в качестве транспорта;
- Различные обновления в реализации "git p4", "git svn" и "gitk";
- Разрешено контролируемое извлечение объектов из репозитория, клонированного в режиме shallow (клон без полной истории изменений, созданный с использованием опции "--depth");
- Добавлена возможность переопределения обработчика команды lv через переменную окружения LV, по аналогии с переопределением less через LESS;
- Использования опции "--prune" в команде "git fetch" теперь позволяет при извлечении удалённо отслеживаемой ветки 'frotz' осуществить предварительное удаление ранее извлечённой ветки 'frotz/nitfol' для высвобождения места;
- Добавлена переменная конфигурации "diff.orderfile=file", выступающая аналогом опции "-Ofile" для команды "git diff";
- Поддержка синтаксиса для исключения отдельных путей, например, git log -- . ':!dir'" приведёт к обработке всего содержимого, кроме директории 'dir';
- В процессе выполнения команды "git difftool" добавлено отображение общего числа файловых путей и сколько их них уже показано;
- Команда "git push origin master", используемая для отправки текущей master-ветки для обновления внешней master-ветки в оригинальном репозитории, расширена для использования идентичного метода маппинга ссылок, позволяющего определить какие из ссылок в оригинальном репозитории были обновлены на основании текущей master-ветки;
- В "gitweb" добавлена возможность работы с иерархиями ссылок, отличных от refs/heads, когда используются дополнительные пространства имён веток, например, refs/changes/ в Gerrit;
- В команды подобные "git log" добавлена опция "--exclude=glob" для исключения при выводе истории изменений, данных соответствующих указанной маске, например, "git log --exclude='*/*' --branches".
Начиная с выпуска 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 .". Команда "git add путь" в Git 2.0 будет соответствовать выполнению "git add -A путь" в выпусках Git 1.x. Кроме того, будет изменён префикс по умолчанию для команды "git svn" c refs/remotes на refs/remotes/origin/, если префикс не был явно задан при помощи опции "--prefix".