`git config`和`git push --set-upstream`之间有什么区别?

时间:2011-10-12 11:13:40

标签: git git-push git-config

问题

有什么区别:

$ 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一起使用。根据{{​​1}}手册:

git push

1 个答案:

答案 0 :(得分:8)

不,这些是非常不同的。如果未指定其他refspec,则第一个配置设置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提供默认操作,但也用于其他各种情况,例如在{{1}的顶部提供有用的消息它告诉你git statusmaster的比较。但是,这些设置,用于通知origin/mastergit push的默认操作,除非您还将配置选项git push origin设置为push.default (或最新版本中的tracking)。

因此,作为非常近似的摘要,设置upstream会影响remote.<name>.push的默认操作,而git push会设置通常只会影响git push -u origin master操作的配置选项。