Анонсирован релиз распределенной системы управления исходными текстами 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.

Источник: http://www.opennet.ru/opennews/art.shtml?num=39883