В конце мая основной разработчик Git, Junio C Hamano, объявил в своем списке рассылки о долгожданном выпуске 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, будущее выглядит ярко. Если нет, когда вы вступаете в клуб?