git命令中的'origin'和'remote'有什么区别?

在git lingo中, originremote是一回事吗? 还是origin指的是本地目录?

git push -u origin master的情况下:以下哪一种解释是正确的?

  1. “把所有东西都推送到远程回购”原产地“和它的分支”主“”
  2. “把所有从本地原始回购”原产地“推到上游”主“分支”

感谢任何澄清!

我的问题的答案为我澄清了两个问题:

  1. origin是指远程回购,而不是远程回购的本地克隆副本。 当你读到originremote的别名,并在git clone的时候创build的,这是不明确的
  2. origin是指在git push -u origin master的远程回购,因为回购的本地副本是隐含的和“很less引用”的。

在git lingo中, origin就是最初克隆一个repo的远程服务器的默认名称。 它可能同样被称为sourceremoteremote

请记住, git是一个点对点的分布式系统,而不是一个具有客户/服务器,主/从,父/子关系的任何内置概念(尽pipe这可能是由用户在特定场景中强加的)。

所有的遥控器是平等的。 origin简单地(并且字面上)是那些等于(对于克隆的回购)的第一个。 🙂

正如Jan在评论中指出的那样,与每个遥控器相关的名字都是为了您的方便。 如果你发现origin不适合你,那么你可以改变它。

至于你对push语句的解释,你的第一个是最接近正确的地方,但是push命令的写入将把本地master分支推送到(本地configuration的)名称origin标识的远程master分支上。

如果远程没有master分支,那么将会创build一个分支。

push命令和标志,选项等的全部细节当然是在文档中 。

由于您的操作是在回购的环境中执行的,因此您很less(如果曾经)明确提及“本地”回购协议。

您可以有多个遥控器,每个都有不同的名称 – 例如默认的“原点”

你的问题是假设你现在已经把主分支签出了。

 git push -u origin master 

将名为master的本地分支推送到“origin”远程,作为名为master的分支。 -u标志告诉本地git跟踪远程分支,作为本地分支的上游。

不,他们不是这个意思。

remote ,在git -speak中,是指任何远程存储库,比如你的GitHub或者其他的git服务器。

根据惯例, origingit默认的远程名称。 当你做一个git clone <url><url>会自动添加到你的本地仓库中。 当然,您可以使用git remote add在不同的名称下添加其他遥控器。

当你做git push -u origin master ,它的意思是“把所有的东西从我的本地主机推到远程的命名origin ”。 当然,这个命令的结构更一般 – 更通用的forms是git push -u <remote> <branch> ,它将分支命名branch推送到指定的远程,在远端创build它,如果远程还没有它(这是-u标志所做的)。

作为进一步的附录,默认情况下, git push会将当前分支推送到origin ,对应于git push origin <current-branch>

远程只是一个字:用来标识某个其他Git存储库的名称。

当您从其他(“origin”-al)Git仓库克隆时,stringorigingit clone自动放入(单数)远程的默认名称。 您可以select其他名称,和/或添加更多的遥控器。 每个远程站点至less有一个URL,这是另一个存储库的地址。

对于git push ,第三个单词 – 如果需要,调整这个数字,如果你添加各种标志; 在这种情况下,您添加了-u所以现在是第四个字 – 通常是一些远程的名称。

其余的单词都是refspecs ,可以总结(虽然不是100%准确地…实际上,低于50%准确,取决于你如何计算:-))作为由冒号分隔的一对分支名称

如果你只写了一个像master这样的分支名称,那么Git将这个意思表示为“如果设置了上游的使用(部分),否则使用冒号后面的同名”。 通常上游,如果设置,具有相同的基本名称,所以master通常意味着master:master 。 Git发送它们 – 在你的分支上find的远程URL提交(左边的名字)上的Git,然后要求它们将它们的分支(右边的名字)设置为刚刚为该分支推送的同一个提示提交。

如果你没有提交任何refspecs,Git的默认取决于你的Git版本。 由于Git版本2.0,默认是推动你的当前分支到远程同名的分支。

-u标志告诉git push ,如果推送成功,它应该为刚刚推送的分支设置上游。

分支的上游分为两部分:远程名称和该远程分支的名称。 既然你给git push这两个项目 – 远程的名字是origin ,而分支是第二个(后冒号) master从隐含的master:mastermaster – 这将成功,设置上游master origin/master

编辑 :你可能会很自然地想知道origin/master上游环境是从哪里来的,这在一定程度上是历史的神器,不幸的是,这会导致大量的混淆,现在请记住, 分支远程跟踪分支在Git中都是不同的东西,它们都是以各种方式相关的,但是要记住它们是不一样的,而且这些术语有着非常明确的含义。新的术语上游更好,但不是所有的描述都使用它。)

不, remoteorigin的父母结构。 这只是在克隆存储库时remote Git创build的默认名称。

这个问题的更多信息: 什么是Git的“起源”?