在 git 命令中,“ source”和“ remote”有什么区别?

在 git 术语中,originremote是同一个东西吗? 还是 origin指的是本地目录?

git push -u origin master为例: 下列哪一种解释是正确的?

  1. “把一切都推向上游的远程回收叫做‘起源’,它的分支叫做‘主人’”
  2. “把所有东西从本地原始回购所谓的‘原产地’到上游的‘主’分支”

感谢你的解释!

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

  1. origin指的是远程回购,而不是远程回购的本地克隆副本。当读取到 originremote的别名并且是在 git clone时创建的时候,这是不清楚的
  2. origin是指 git push -u origin master中的远程回购协议,因为本地回购协议的副本是隐含的,而且“很少被引用”。
36509 次浏览

您可以拥有多个遥控器,每个遥控器具有不同的名称——比如默认的“起点”

您的问题假设您当前已经检查了主分支。

git push -u origin master

将本地名为 master 的分支推送到名为 master 的分支的“原点”远程。U 标志告诉本地 git 将远程分支作为上游跟踪到本地分支。

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

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

不,它们的意思不一样。

git的话说,remote是指任何远程存储库,比如您的 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将把当前分支推到与 git push origin <current-branch>对应的 origin

遥控器只是一个单词: 一个用来标识其他 Git 存储库的名称。

字符串 origingit clone自动放入的(单数)远程程序的默认名称,当您从其他(“ source”-al) Git 存储库克隆时。您可以选择其他名称,并/或添加更多的远程。每个远程至少有一个 URL,在这里可以找到另一个存储库。

对于 git push,第三个单词ーー如果需要,可以调整这个数字,如果您添加了各种标志; 在本例中,您添加了 -u,所以现在它是第四个单词ーー通常是某个远程程序的名称。

其余的单词都是 参数,它可以被概括为 由冒号分隔的一对分支名称(虽然不是100% 准确... ... 实际上,不到50% 准确,这取决于您如何计算: ——)。

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

如果您没有输入任何 refspecs,那么 Git 的默认值取决于您的 Git 版本。自 Git 版本2.0以来,默认设置是将 现行分行推送到远程系统上同名的分支。

-u标志告诉 git push,如果推送成功,它应该将 准备好了放在刚才推送的分支的上游。

分支的 逆流而上由两部分组成: 远程的名称和该远程上的分支的名称。既然你给了 git push两个项目ーー遥控器的名字是 origin,而分支是 master中隐含的 master:master中的第二个(冒号后) masterーー如果成功的话,它将把 master的上游设置为 origin/master

(剪辑: 你可能,相当合理地,想知道 /来自 origin/master逆流而上设置。这部分是历史文物。不幸的是,这会导致大量的混乱。现在,只要记住 遥控器树枝远程跟踪分支在 Git 中都是不同的东西。它们以不同的方式联系在一起,但重要的是要记住它们是不一样的,这些术语有非常具体的含义。赛道这个词也超载了。新术语 逆流而上更好,但并非所有描述都使用它。)

在 git 行话中,origin只是最初克隆回购的遥控器的默认名称。它可能同样被称为 source或者 remote1或者仅仅是 remote

请记住,git是一个对等的分布式系统,没有任何内置的客户机/服务器、主/从、父/子关系(尽管这些可能是由用户在特定场景中强加给它的)概念。

所有的遥控器都是一样的。origin简单地(字面上)是这些等价物中的第一个(对于克隆的回购)。:)

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

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

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

Push 命令的全部细节以及标志、选项等当然都在文档 中。

你很少(如果曾经)明确地提到“本地”回购,因为你的操作是在回购的上下文中执行的。