Релиз распределенной системы управления исходными текстами Git 2.0

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

© OpenNet