В чем разница между `git config` и` git push --set-upstream` - PullRequest
2 голосов
/ 12 октября 2011

Вопрос

В чем разница между:

$ git remote add origin git@github.com:yourname/yourproject.git
$ git config remote.origin.push refs/heads/master:refs/heads/master
$ git push

и:

$ git remote add origin git@github.com:yourname/yourproject.git
$ git push origin master -u

Является ли вторая версия просто более новой и более короткой, чем первая версия, илиЕсть ли другие различия?

Фоновое исследование

Начиная с Git 1.7.0, вы можете использовать опцию --set-upstream с git push.Согласно инструкции git push:

-u, --set-upstream
    For every branch that is up to date or successfully pushed, add upstream
    (tracking) reference, used by argument-less git-pull(1) and other commands. For
    more information, see branch.<name>.merge in git-config(1).

1 Ответ

8 голосов
/ 12 октября 2011

Нет, они очень разные.Первый параметр конфигурации, remote.<name>.push устанавливает стандартную ссылку refspec для отправки, если никакая другая ссылка не указана.По умолчанию, выполнение git push origin будет переводить каждую ветку в ветку с соответствующим именем, если ветка с таким именем уже существовала на удаленном компьютере.После выполнения:

git config remote.origin.push refs/heads/master:refs/heads/master

... вы обнаружите, что git push origin просто подтолкнет master к master.

Другая команда, которую вы цитируете, git push -u origin master, устанавливаетдве разные опции конфигурации, если отправка успешна:

  • branch.master.remote установлен на origin
  • branch.master.merge установлен на refs/heads/master

В сущности, это говорит о том, что master в origin следует рассматривать как "восходящую" ветку по умолчанию вашей ветви master.Их наиболее очевидный эффект заключается в предоставлении действия по умолчанию для git pull, когда вы находитесь на master, но также используются в различных других ситуациях, таких как предоставление полезного сообщения в верхней части git status, которое сообщает вам, гдеmaster сравнивается с origin/master.Эти параметры не , однако используются для информирования действия по умолчанию git push и git push origin, если вы не установили параметр конфигурации push.default на tracking (или upstream в последних версиях).

Итак, в качестве очень приблизительной сводки установка remote.<name>.push влияет на действие по умолчанию git push, тогда как git push -u origin master устанавливает параметры конфигурации, которые обычно влияют только на действие git pull.

...