Git中的“起源”是什么?


582

当我跑步时:

git push origin branchname

到底是什么origin,为什么我必须在分支名称之前键入它?


63
“来源”是您要在其中发布提交的远程存储库的名称。按照约定,默认的远程存储库称为“源”,但是您可以同时使用多个远程服务器(名称不同)。这里的更多信息(例如):gitref.org/remotes
Benoit Courtine

1
还要注意的起源是“上游”回购:看stackoverflow.com/questions/2739376/...
VonC


但是,当使用git fetch然后使用git branch -r时,本地分支前面会加上origin / ugh
小子

检出.git \ config文件,其中包含别名到URL的映射,.git文件夹默认为隐藏。
Abhijeet Patel

Answers:


568

origin系统上特定远程存储库的别名 。它实际上不是该存储库的属性。

通过做

git push origin branchname

您是说要推送到origin存储库。无需命名远程存储库origin:实际上,同一存储库可以为另一个开发人员使用不同的别名。

远程只是存储库URL 的别名。您可以通过使用以下命令查看每个遥控器属于哪个URL

git remote -v

push命令中,您可以使用遥控器,也可以直接使用URL。使用URL的示例:

git push git@github.com:git/git.git master

1
单个遥控器可以作为其他多个遥控器的别名吗?如果我想将一个遥控器推到其他多个遥控器怎么办?例如,推送到主存储库,然后推送到备份存储库?在某些情况下想要这样做是否合理?编辑:这里有几种解决方案
Yankee

1
如果我忽略“ origin”关键字怎么办?当我们说“ git push”时,是不是还是要将所有提交都推送到远程存储库?添加关键字“ origin”似乎是多余的。
Mugen

@Mugen在文档中,git push您可以看到它首先检查了该存储库的配置(可以使用进行检查git config --list)以找到名为的密钥branch.<branchname>.remote。如果未设置,则“默认为原点” -git-scm.com/docs/git-push
Kenmore

156

origin不是远程仓库名。而是将本地别名设置为代替远程存储库URL的键。

这样可以避免用户在提示推送时不得不键入整个远程URL。

默认情况下,此名称是默认设置的,并且是第一次从远程克隆时,Git的约定。

该别名名称不是硬编码的,可以使用以下命令提示符进行更改:

git remote rename origin mynewalias

请查看http://git-scm.com/docs/git-remote以获得进一步的说明。


1
如果我忽略“ origin”关键字怎么办?当我们说“ git push”时,是不是还是要将所有提交都推送到远程存储库?添加关键字“ origin”似乎是多余的。
Mugen

74

Git具有“远程”的概念,它只是存储库其他副本的URL。当您克隆另一个存储库时,Git会自动创建一个名为“ origin”的远程对象并指向它。

您可以通过键入来查看有关遥控器的更多信息git remote show origin


1
git命令对初学者非常困惑。我想这与该版本控制系统的历史有关。所以,问题是:git remote show origin为什么不简单地代替git show origin?一定有原因,这是什么?谢谢。
Stack0verflow

5
@ Stack0verflow:最好将其作为一个新问题进行询问,以便在您好奇的情况下人们可以进行研究。'git show'已经是另一个显示提交的命令,从技术上讲,没有任何事情可以阻止您拥有一个名为'origin'的分支,除了拥有一个名为origin的远程设备外……
Jason Malinowski


24

简单!运行以下命令时,“ origin”就是您对远程存储库的昵称:

git remote add origin git@github.com:USERNAME/REPOSITORY-NAME.git

从那时起,Git知道“来源”指向该特定存储库(在本例中为GitHub存储库)。您可以将其命名为“ github”或“ repo”或任何您想要的名称。



11

当您使用克隆一个存储库时git clone,它将自动创建一个远程连接,称为origin指向复制的存储库。这对于创建中央存储库的本地副本的开发人员很有用,因为它提供了一种便捷的方式来拉取上游更改或发布本地提交。这也是大多数基于Git的项目将其中央存储库起源称为原因的原因。



0

https://www.git-tower.com/learn/git/glossary/origin

在Git中,“ origin”是最初从中克隆项目的远程存储库的简称。更准确地说,它代替了原始存储库的URL,从而使引用更加容易。

请注意,起源绝不是“魔术”名称,而只是标准约定。尽管保留该约定是有意义的,但是您可以完美地重命名它而不会丢失任何功能。

在以下示例中,“ clone”命令的URL参数成为克隆的本地存储库的“来源”:

git clone https://github.com/gittower/git-crash-course.git

复制他人编写的内容时,必须明确说明自己正在这样做,并且必须始终包含指向源的链接。否则,这是s窃,这是删除答案的原因。此外,您的答案已经发布
法比奥说,请恢复莫妮卡(Monica)

0

其他答案说这origin是远程存储库的URL的别名,并不完全准确。应当注意,以开头的地址http是URL,而以开头的地址git@URI或通用资源标识符。

所有URL都是URI,但并非所有URI都是URL。

简而言之,当您键入内容时,git remote add origin <URI>您是在告诉本地git,每当您使用该单词时origin,实际上就是您指定的URI。可以将其视为拥有值的变量。

就如同一个变量,你可以将其命名任何你想要的(如githubherokudestination,等)。


0

远程(存储库URL别名)→ (上游别名)→ (分支别名);

  • remote,级别相同working directoryindexrepository

  • origin,本地存储库分支映射到远程存储库分支

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.