git命令中的'origin'和'remote'有什么区别?
在git lingo中, origin
和remote
是一回事吗? 还是origin
指的是本地目录?
在git push -u origin master
的情况下:以下哪一种解释是正确的?
- “把所有东西都推送到远程回购”原产地“和它的分支”主“”
- “把所有从本地原始回购”原产地“推到上游”主“分支”
感谢任何澄清!
我的问题的答案为我澄清了两个问题:
-
origin
是指远程回购,而不是远程回购的本地克隆副本。 当你读到origin
是remote
的别名,并在git clone
的时候创build的,这是不明确的 -
origin
是指在git push -u origin master
的远程回购,因为回购的本地副本是隐含的和“很less引用”的。
在git lingo中, origin
就是最初克隆一个repo的远程服务器的默认名称。 它可能同样被称为source
或remote
或remote
。
请记住, 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
服务器。
根据惯例, origin
是git
默认的远程名称。 当你做一个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仓库克隆时,stringorigin
是git 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:master
从master
– 这将成功,设置上游master
origin/master
。
( 编辑 :你可能会很自然地想知道origin/master
的上游环境是从哪里来的,这在一定程度上是历史的神器,不幸的是,这会导致大量的混淆,现在请记住, 分支和远程跟踪分支在Git中都是不同的东西,它们都是以各种方式相关的,但是要记住它们是不一样的,而且这些术语有着非常明确的含义。新的术语上游更好,但不是所有的描述都使用它。)
不, remote
是origin
的父母结构。 这只是在克隆存储库时remote
Git创build的默认名称。
这个问题的更多信息: 什么是Git的“起源”?