为什么这个示例在不使用`-u`的情况下使用`git push`,而另一个示例呢?

时间:2019-01-11 21:49:04

标签: git

带有Git的版本控制说:

  

仅将refspec与源ref(即不带源ref)一起使用的按钮   目标参考)在远程存储库中创建新分支

$ cd ~/public_html
$ git checkout -b foo
Switched to a new branch "foo"
$ git push origin foo
Total 0 (delta 0), reused 0 (delta 0)
To /tmp/Depot/public_html
 * [new branch]      foo -> foo

Git Pocket Guide 说:

  

如果您已添加自己的本地分支机构并希望开始共享   ,请使用-u选项让Git将您的分支添加到   远程,并以通常的方式为您的本地分支机构设置跟踪,   例如:

$ git push -u origin new-branch
     

完成此初始设置后,您可以仅在此分支上使用git push,   没有选项或参数,则可以推送到同一遥控器。

他们试图完成的事情之间有什么区别?

为什么第一个不使用-u,而第二个却不使用?

谢谢。

1 个答案:

答案 0 :(得分:3)

如果您的问题是关于 -u的{​​{1}}选项 ,它是重复的:请参阅Why do I have to "git push --set-upstream origin <branch>"?How do I push a new local branch to a remote Git repository and track it too?关于为什么2012年的书中没有包含当时没有特别必要的选项的信息。


假设您的意思是this specific book, Version Control with Git, published in August 2012,则不建议使用git push的原因是它于2012年发布。

Git版本2.0已过时:

git push -u
您可以看到,

早于2012年。现在看一下1.7.11版本:

$ git show v2.0.0
tag v2.0.0
Tagger: Junio C Hamano <gitster@pobox.com>
Date:   Wed May 28 11:04:29 2014 -0700

虽然现在是2012年,但在2012年已经很晚了,以至于这本书可能为时已晚。

我不清楚 Git Pocket Reference 是指什么,但是可能是在Git 2.0推出之后编写或更新的。

为什么2.0和1.7.11是相关的

Git 1.7.11版为$ git show v1.7.11 tag v1.7.11 Tagger: Junio C Hamano <gitster@pobox.com> Date: Sun Jun 17 14:07:26 2012 -0700 引入了名为push.default的新设置。使用simple设置时,Git对默认的simple操作施加了新要求:您要推送的分支的 upstream 名称必须与 local 名称。也就是说,如果您的git push的上游是dev,则没有参考说明的origin/develop失败。同时,如果您的git push上游没有 ,则没有refspec的dev也将失败。

(使用名为git push的{​​{1}}设置时,这两个默认的push.default操作都将运行完成,但是会将matching推到git pushdev上(如果存在),或者在dev没有origin的情况下完全不推dev。)

如果您个人留下了origin ,则该设置在2.0之前的Git版本中被视为dev,而在push.default中被视为在Git 2.0及更高版本中。由于本书的全部或大部分内容都是在 Git 1.7.11发布之前编写的,因此几乎无法考虑matching设置将如何影响simple没有提到simple选项。

现代说明会注意到git push很重要,因此,假设您使用的是Git 2.0版或更高版本,并且以后选择的-u操作没有refspecs,它们将按照您希望的方式运行。默认为--set-upstream。因此,他们会要求使用git push,或者使用较短的push.default拼写(在git push --set-upstream origin new-branch中表示相同的意思)。