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

YCo*_*ode 63 git git-remote

在git lingo,是originremote同样的事情?或者确实origin是指本地目录?

在以下情况中git push -u origin master:以下哪项解释是正确的?

  1. "将所有上游推送到名为'origin'的远程仓库及其分支'master'"
  2. "将所有东西从当地原始仓库称为'原产'到上游'主'分支"

感谢任何澄清!

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

  1. origin指的是远程仓库,而不是远程仓库的本地克隆副本.当读取的origin是别名remote并且在时间创建时,这一点并不清楚git clone
  2. origin指的是远程仓库,git push -u origin master因为仓库的本地副本是隐含的并且"很少被引用".

Del*_*ics 62

在git中,lingo origin只是最初克隆了repo的远程的默认名称.它可能同样被称为sourceremote1或只remote.

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

所有遥控器都是平等的. origin简单地(并且字面上)是这些等于(克隆回购)中的第一个.:)

正如Jan在评论中指出的那样,与每个遥控器相关的名称是为了您的方便.如果您发现这origin对您不起作用,那么您可以更改它.

至于您对该push语句的解释,您的第一个是最接近正确的,但是写入的push命令会将本地master分支推送到master由(本​​地配置的)名称标识的远程分支origin.

如果master遥控器中没有分支,则将创建一个分支.

push命令和标志,选项等的完整细节当然在文档中.

您很少(如果有的话)明确地引用"本地"仓库,因为您的操作是在回购的上下文中执行的.

  • @Jan - 是的,很好。我已经更新了答案以指出这一点(归因于您的评论)。:) (2认同)

Seb*_*icz 14

不,他们并不是一回事.

remotein git-speak,指任何远程存储库,例如您的GitHub或其他git服务器.

origin按惯例,是默认的远程名称git.当你这样做时git clone <url>,<url>会自动添加到你名下的本地仓库origin.当然,您可以使用不同的名称添加其他遥控器git remote add.

当你这样做时git push -u origin master,它意味着"将所有东西从我的本地主人推送到名为的遥控器origin".当然,这个命令的结构更为通用 - 更通用的形式是git push -u <remote> <branch>,将命名的分支推branch送到指定的远程,如果远程没有它,则在远端创建它(这就是-u标志一样).

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


Jef*_*ett 12

您可以拥有多个遥控器,每个遥控器都有不同的名称 - 例如默认的"原点"

您的问题假设您当前已检出主分支.

git push -u origin master
Run Code Online (Sandbox Code Playgroud)

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


tor*_*rek 5

一个远程只是一句话:一个名字用来识别某个地方其他一些Git仓库.

该字符串origingit clone从其他("origin"-al)Git存储库克隆时自动放入的(单数)远程的默认名称.您可以选择其他名称,和/或添加更多遥控器.每个远程至少有一个URL,这是找到另一个存储库的位置.

对于git push,第三个字 - 如果需要,调整此数字,如果你添加各种标志; 在这种情况下,你添加,-u所以现在它是第四个字 - 通常是一些遥控器的名称.

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

如果您只编写一个分支名称master,Git将其视为"如果设置了一个,则使用(部分)上游,否则在冒号后使用相同的名称." 通常,上游(如果设置)具有相同的基本名称,因此master通常会结束意义master:master.Git发送它们 - 你的分支上的远程URL提交(左边的名字)上的Git ,然后要求他们将你分支(右边的名字)设置为你刚推送给该分支的同一个提示.

如果你没有输入任何refspecs,Git的默认值取决于你的Git版本.从Git 2.0版开始,默认是将当前分支推送到远程同名的分支.

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

分支的上游分为两部分:远程的名称和该远程分支的名称.既然你给了git push这两个项目,在远程的名字origin,和分支是第二个(冒号后)master从隐含master:mastermaster-这个意愿,如果成功,将上游的masterorigin/master.

(编辑:你可能,非常合理地,想知道它/来自上游设置的位置origin/master.这部分是一个历史文物.不幸的是,它会导致大量的混乱.现在,请记住远程,分支远程跟踪分支在Git中都是不同的东西.它们都以各种方式相关,但重要的是要记住它们不相同,并且术语具有非常特定的含义.单词track也是过载的.新术语上游更好,但并非所有描述都使用它.)