2

问题

有什么区别:

$ 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).
4

1 回答 1

8

不,这些是非常不同的。第一个配置设置,remote.<name>.push如果没有指定其他 refspec,则为推送设置默认的 refspec。默认情况下,git push origin只要远程上已经存在具有该名称的分支,doing 会将每个分支推送到具有匹配名称的分支。做完之后:

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

...你会发现那只git push origin会推mastermaster.

git push -u origin master如果推送成功,您引用的另一个命令会设置两个不同的配置选项:

  • branch.master.remote被设定为origin
  • branch.master.merge被设定为refs/heads/master

这些本质上说masterinorigin应该被视为您分支的默认“上游”master分支。git pull它们最明显的效果是为您在 上时提供默认操作master,但也用于各种其他情况,例如在顶部提供有用的消息git status,告诉您master与 相比在哪里origin/master。但是,这些设置用于通知默认操作,git push除非git push origin您还将配置选项设置push.defaulttracking(或upstream在最新版本中)。

因此,作为一个非常近似的总结,设置remote.<name>.push会影响 的默认操作git push,而git push -u origin master设置通常只会影响git pull.

于 2011-10-12T11:26:58.867 回答