' origin'有什么区别?和#'远程'在git命令中?

时间:2016-08-08 20:10:44

标签: git git-remote

在git lingo中,originremote是一样的吗?或origin是否引用本地目录?

对于git push -u origin master:以下哪种解释是正确的?

  1. "将所有上游推送到名为“来源”的远程仓库。及其分支' master'"
  2. "推送来自本地原创回购品的所有产品,称为' origin'到上游'主人'分支"
  3. 感谢任何澄清!

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

    1. origin指的是远程仓库,而不是远程仓库的本地克隆副本。当一个人读到originremote的别名且在git clone时创建
    2. 时,这一点就不明确了
    3. origin指的是git push -u origin master中的远程仓库,因为仓库的本地副本是隐含的,并且很少引用"。

5 个答案:

答案 0 :(得分:56)

在git中,术语origin只是最初克隆了repo的遥控器的默认名称。它可能同样被称为sourceremote1或仅remote

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

所有遥控器都是平等的。 origin简单地(并且确切地说)是平等中的第一个(对于克隆的回购)。 :)

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

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

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

Full details of the push command and the flags, options etc are of course in the docs

你很少(如果有的话)明确地引用'本地'仓库,因为你的操作是在回购的背景下进行的。

答案 1 :(得分:12)

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

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

git push -u origin master

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

答案 2 :(得分:12)

不,他们的意思不一样。

remote中的

git - 说,指的是任何远程存储库,例如您的GitHub或其他git服务器。

按惯例,

origingit中的默认远程名称。当您执行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>

答案 3 :(得分:5)

远程只是一个词:用于在某处识别其他Git存储库的名称。

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

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

其余的单词都是 refspecs ,可以归纳(虽然不是100%准确...实际上,准确率低于50%,具体取决于你的计算方式:-)) em>由冒号分隔的一对分支名称。

如果您只编写一个分支名称,如master,Git认为“如果设置了一个,则使用(部分)上游,否则在冒号后使用相同的名称。”通常,上游(如果设置)具有相同的基本名称,因此master通常会结束master:master。 Git发送它们 - 在你的分支(左边的名字)上找到的远程URL提交中的Git,然后要求他们设置他们的分支(名称在右边)提交给你的那个分支。

如果你没有输入任何refspecs,Git的默认值取决于你的Git版本。从Git 2.0版开始,默认情况下是将当前分支推送到遥控器上同名的分支。

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

分支的上游分为两部分:远程名称和该远程分支的名称。由于您提供了git push两个项目 - 远程的名称为origin,而分支是来自master的隐含master:master的第二个(后冒号)master 1}} - 如果成功,则将master的上游设置为origin/master

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

答案 4 :(得分:2)

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

此问题中的更多信息:What is “origin” in Git?