Анонсирован релиз распределенной системы управления исходными текстами Git 2.0, примечательный изменением поведения команд «git push» и «git add», влияющим на обратную совместимость.
Изменение поведения команды «git push» проявляется в ситуации когда при выполнении «git push» явно не указано, что именно помещать в репозиторий. В прошлых выпусках использовалась семантика «matching», при которой для обновления выбираются все внешние ветки и теги с именами, совпадающими с локальными. Начиная с Git 2.0 поведение изменено и по умолчанию применяется семантика «simple», при которой изменения отправляются только из текущей ветки в ветку с тем же именем, в случае если локальная ветка назначена для интеграции с удалённой веткой. Переопределить новое поведение можно через конфигурационную переменную «push.default».
Что касается команды «git add», то изменение связано с тем, что при неуказании добавляемых путей при выполнении «git add -u» и «git add -A», данные команды отныне применяются для всего репозитория, а не иерархии относительно текущей поддиректории, что соответствует поведению «git commit -a» и других похожих команд. Для распространения действия только начиная с текущей директории следует явно указывать текущий путь, например, «git add -u .». Команда «git add путь» в Git 2.0 соответствует выполнению «git add -A путь» в выпусках Git 1.x, т.е. при указании «git add dir/» в репозиторий будет внесена запись об удалённых из директории путях (в прошлых выпусках при указании «git add путь» удаленные пути игнорировались, теперь нужно явно указывать опцию «git add —ignore-removal путь»).
Кроме того, c refs/remotes на refs/remotes/origin/ изменён префикс по умолчанию для команды «git svn», если префикс не был явно задан при помощи опции «—prefix». Из команды «git diff-files» исключена опция «-q» которая часто путалась с операцией скрытия вывода («quiet»), но на деле указывала на игнорирование удаления (вместо «-q» нужно использовать «git diff-files —diff-filter=d»). В реализации «git request-pull» прекращена поддержка некоторых эвристических выводов при выборе ветки для pull-запроса, которые часто приводили к ошибкам. Из состава удалён интерфейс «remote-hg/bzr», который теперь развивается как отдельный плагин. В файлах «.gitignore» обеспечено игнорирование пробелов в хвосте путей (если путь оканчивается пробелом теперь нужно явно указывать «path «).
Из улучшений можно отметить добавление поддержки опций «—depth» в «git gc —aggressive», «—show-linear-break» в «git log», «—gpg-sign» в командах, создающих коммиты («pull», «rebase»), «-N» в «git reset». В «git rebase» опция «-» разбирается как указание на прошлую ветку («@{-1}»). Работа опций «-h» (скрытие заголовка) и «-c» (счётчик срабатываний) в «git grep» приближена к утилите grep. Команда «git push» при работе через интерфейс transport-helper теперь поддерживает инициирование принудительного обновления ссылок. Указание «-» вместо имени входного файла в команде «git config —file» позволяет организовать загрузку данных из входного потока.
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.