在git lingo中,origin
和remote
是一样的吗?或origin
是否引用本地目录?
对于git push -u origin master
:以下哪种解释是正确的?
感谢任何澄清!
我的问题的答案为我澄清了两个问题:
origin
指的是远程仓库,而不是远程仓库的本地克隆副本。当一个人读到origin
是remote
的别名且在git clone
时创建origin
指的是git push -u origin master
中的远程仓库,因为仓库的本地副本是隐含的,并且很少引用"。答案 0 :(得分:56)
在git中,术语origin
只是最初克隆了repo的遥控器的默认名称。它可能同样被称为source
或remote1
或仅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
服务器。
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>
。
答案 3 :(得分:5)
远程只是一个词:用于在某处识别其他Git存储库的名称。
当您从其他(“origin”-al)Git存储库进行克隆时,字符串origin
是git 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)
不,remote
是origin
的父结构。这只是克隆存储库时Git创建的remote
默认名称。
此问题中的更多信息:What is “origin” in Git?