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

What is the difference between 'origin' and 'remote' in git commands?

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

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

  1. "push everything upstream to the remote repo called 'origin' and its branch 'master'"
  2. "push everything from the local originating repo called 'origin' to the upstream 'master' branch"

感谢任何澄清!

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

  1. origin 指的是远程仓库,而不是远程仓库的本地克隆副本。当有人读到 originremote 的别名并且是在 git clone
  2. 时创建时,这一点并不清楚
  3. origin 指的是 git push -u origin master 中的远程仓库,因为隐含了仓库的本地副本并且 "rarely referenced".

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

您的问题假设您当前已签出 master 分支。

git push -u origin master

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

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

关于这个问题的更多信息:What is “origin” in Git?

不,它们的意思不同。

remote,在 git 中,指的是任何远程存储库,例如您的 GitHub 或另一个 git 服务器。

按照惯例,

origingit 中的默认远程名称。当您执行 git clone <url> 时,<url> 会自动添加到名称为 origin 的本地存储库中。当然,您可以使用 git remote add.

添加不同名称的其他遥控器

当您执行 git push -u origin master 时,它的意思是 "push everything from my local master to the remote named origin"。这个命令的结构当然更通用——更通用的形式是 git push -u <remote> <branch>,它将把名为 branch 的分支推送到指定的远程,如果远程没有,则在远端创建它还没有(这就是 -u 标志的作用)。

进一步补充,git push,默认会将当前分支推送到origin,对应git push origin <current-branch>.

A remote 只是一个词:一个名称,用于标识某个地方的其他 Git 存储库。

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

对于git push,第三个字——如果你添加了各种标志,请根据需要调整这个数字;在本例中,您添加了 -u,所以现在它是第四个词——通常是某个遥控器的名称。

剩下的话都是refspecs,可以总结一下(虽然不是100%准确...其实不到50%准确,看你怎么算了: -) ) 作为一对用冒号分隔的分支名称.

如果你只写一个分支名称,如 master,Git 将其视为 "use (part of) the upstream if one is set, otherwise use the same name after the colon." 通常上游,如果设置,具有相同的基本名称,所以 master 通常结束意味着 master:master。 Git 发送他们——远程 URL 的 Git——在 你的 分支(左边的名字)上找到的提交,然后询问他们将 他们的 分支(右侧的名称)设置为您刚刚为该分支推送的同一提示提交。

如果您不输入任何参考规格,Git 的默认值取决于您的 Git 版本。从 Git 版本 2.0 开始,默认是将您的 当前分支 推送到远程上同名的分支。

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

分支的 upstream 分为两部分:远程名称和该远程分支的名称。由于您给了 git push 两个项目——遥控器的名称是 origin,而分支是隐含的 master:master 中的第二个(post-冒号)master ] 来自 master——如果成功,这将把 master 的上游设置为 origin/master

(Edit:您可能很自然地想知道 /upstream 设置中的来源 origin/master。这在一定程度上是历史产物。不幸的是,它会导致大量混乱。现在,请记住 remotebranch, 和 remote-tracking branch 在 Git 中都是不同的东西。它们以各种方式相关,但重要的是要记住它们并不相同,并且术语具有非常具体的含义。track这个词也被重载了。新术语upstream更好,但并非所有描述都使用它。)

在git 术语中,origin 只是最初克隆回购协议的远程的默认名称。它可能同样被称为 sourceremote1 或只是 remote.

请记住,git 是一个点对点的分布式系统,不具有任何内置的 client/server、master/slave、parent/child 关系概念(尽管这些可能是用户在特定情况下强加给它的)。

所有遥控器都是平等的。 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.

您很少(如果有的话)明确引用 'local' 存储库,因为您的操作是在存储库的上下文中执行的。