Статьи

Что нового в Git 2.0?

В конце мая основной разработчик Git, Junio ​​C Hamano, объявил в своем списке рассылки о долгожданном выпуске Git 2.0. Если вы ознакомитесь с заметками о выпуске , то обнаружите, что сообщество приветствует довольно много изменений.

Git 2.0

В этой статье я предоставлю обзор этих изменений. Мы увидим две большие перемены, которые создают волны, а затем несколько разных.

git push Стандартное поведение

Если вы используете Git для своих проектов, вы должны знать, что общий формат для отправки кода выглядит следующим образом:

 git push [remote_name] [local_branch]:[remote_branch] 

Если вы дисциплинированы в своих привычках и используете этот синтаксис, вы даже не заметите это изменение в Git. Однако, если вы были ленивы и только что выполнили git push , вы, вероятно, получили бы следующее сообщение:

 warning: push.default is unset; its implicit value is changing in Git 2.0 from 'matching' to 'simple'. To squelch this message and maintain the current behavior after the default changes, use: git config --global push.default matching To squelch this message and adopt the new behavior now, use: git config --global push.default simple 

В Git 1.x поведение по умолчанию установлено на matching . Это означает, что все ваши локальные ветки, которые имеют соответствующие ветки на удаленном устройстве, отправляются. Однако в Git 2.0 значение по умолчанию изменяется на simple , что приведет к удалению только вашей текущей ветки в удаленную ветку с тем же именем. Если вы хотите продолжить matching , как в 1.x, вы всегда можете изменить значение по умолчанию.

Изменения в git add

Git 2.0 вносит некоторые изменения в команду git add .

Отмена удаления удаленных файлов

При удалении файлов вы часто находите следующий вывод о состоянии git status :

 # On branch master # Changes not staged for commit: # (use "git add/rm <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # deleted: my_file1 # deleted: my_file2 

В Git 1.x git add игнорирует файлы, которые были удалены из вашего хранилища, и вам придется удалять их отдельно . В Git 2.0 git add dir/ заметит удаленные файлы и внесет изменения для вашего коммита. Вы можете добавить --ignore-removal если вы хотите ставить только новые или измененные файлы.

git add -u

Обычные пользователи Git часто используют команду git add -u . Эта команда вносит изменения во все отслеживаемые файлы для фиксации. Однако в Git 1.x одним из недостатков коммита было то, что он работал с файлами в каталоге, из которого была запущена команда. В Git 2.0 эта команда является древовидной операцией, то есть она ищет измененные файлы во всем хранилище и добавляет их независимо от того, где вы выполняете команду.

Если это сбивает с толку, позвольте мне попытаться объяснить на примере. Допустим, в вашем хранилище есть два файла с изменениями — README и src/my_file . Если вы измените каталог на src и затем запустите git add -u , в Git 1.x будет добавлен только my_file . В Git 2.0 оба файла добавлены. Если вы выполнили команду из родительского каталога, оба файла будут добавлены независимо от версии.

Разные Изменения

Наконец, мы суммируем здесь некоторые другие изменения, о которых вы, возможно, захотите знать.

git pull

Git pull теперь имеет новую переменную конфигурации, pull.ff , которую можно установить, чтобы он мог принимать только ветки перемотки вперед , что исключает слияния и, следовательно, не приводит к конфликтам.

git svn

Если вы используете Git с другими системами контроля версий, вы, вероятно, встретите команду git svn , которая будет служить базовой командой для всех функций, связанных с Subversion.

Ветви удаленного отслеживания для git svn были созданы в refs/remotes в Git 1.x. Однако они будут созданы в refs/remotes/origin , что можно изменить с помощью параметра --prefix . git svn не такая популярная функция, так как большинство организаций перешли на Git, и это, вероятно, не затронет многих людей.

Файлы .gitignore

.gitignore пробелы в файлах .gitignore предупреждаются и игнорируются, если они не .gitignore кавычки. Это изменение не обратно совместимо.

git grep

Команда grep в Git позволила вам искать во всех ветвях. Теперь вы можете заставить его вести себя как собственный grep, когда заданы опции -h (без заголовка) и -c (количество).

Удаление интерфейсов удаленного помощника

Удаленные вспомогательные интерфейсы для Mercurial и Bazaar, которые были найдены в contrib/ , больше не являются частью Git и теперь поддерживаются как отдельные репозитории как сторонние плагины.

С нетерпением

Git, без сомнения, самая популярная система управления версиями, и дискуссии на HackerNews, касающиеся замечаний к выпуску, доказывают это. Git 2.0 имеет свою долю новых функций, как и все версии Git 1.x. Есть несколько несовместимых изменений, но они, скорее всего, не затронут вас. Если вы используете Git, будущее выглядит ярко. Если нет, когда вы вступаете в клуб?