Git中的“起源”是什么?

时间:2012-03-02 07:23:16

标签: git

当我跑步时:

git push origin branchname

究竟什么是origin,为什么我必须在分支名称之前输入它?

13 个答案:

答案 0 :(得分:513)

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

通过

git push origin branchname

你说要推送到origin存储库。没有要求命名远程存储库origin:事实上,同一个存储库可能为另一个开发人员提供了不同的别名。

遥控器只是一个存储存储库网址的别名。您可以使用

查看每个遥控器属于哪个URL
git remote -v

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

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

答案 1 :(得分:133)

origin 远程存储库名称。而是将本地别名设置为代替远程存储库URL的密钥。

它避免了用户在提示推送时必须输入整个远程URL。

默认情况下,此名称是由Git首次从远程克隆时设置的。

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

git remote rename origin mynewalias

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

答案 2 :(得分:69)

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

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

答案 3 :(得分:38)

origin是远程存储库网址的默认别名

答案 4 :(得分:19)

简单! “origin”就是您在运行如下命令时昵称远程存储库的原因:

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

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

答案 5 :(得分:17)

我也对此感到困惑,以下是我所学到的。

克隆存储库时,例如从GitHub:

  • origin是您从中克隆存储库的URL的别名。请注意,您可以更改此别名。

  • 远程存储库中有一个master分支(origin别名)。在本地创建了另一个master分支。

可以从此SO问题中找到更多信息:Git branching: master vs. origin/master vs. remotes/origin/master

答案 6 :(得分:11)

使用git clone克隆存储库时,它会自动创建一个名为 origin 的远程连接,指向克隆的存储库。这对于创建中央存储库的本地副本的开发人员非常有用,因为它提供了一种简单的方法来提取上游更改或发布本地提交。这种行为也是大多数基于Git的项目调用其中央存储库源的原因。

答案 7 :(得分:6)

Origin 短名称,其作用类似于远程存储库URL的别名

让我举例说明。

假设您有一个名为remote repository的{​​{1}},然后将该远程存储库克隆到本地计算机上,因此您有了一个amazing-project。然后您将得到类似下图所示的内容:

enter image description here

因为您克隆了存储库。远程存储库和本地存储库已链接

如果运行命令local repository,它将列出所有链接到本地​​存储库的远程存储库。在那里,您将看到为了从远程存储库中推送或获取代码,您将使用 shortname 'origin'。 enter image description here

现在,这可能有点令人困惑,因为在GitHub(或远程服务器)中,该项目称为“ amazing-project”。那么为什么看起来远程存储库有两个名称呢?

enter image description here

存储库的名称之一就是它在GitHub或某个地方的远程服务器上的名称。可能会像项目名称这样。在我们的例子中,这就是“惊人的项目”。

存储库的另一个名称是 shortname ,它在我们本地存储库中具有与存储库URL相关的名称。这是我们要从该远程存储库中推送或获取代码时将要使用的简称。而且这种短名称的行为类似于url的 alias ,这是我们避免使用整个长url来推送或获取代码的一种方式。在上面的示例中,它称为git remote -v

那么, origin 是什么?

基本上起源是克隆远程存储库时Git用于远程存储库的默认简称。因此,这只是默认

在许多情况下,您将具有指向本地存储库中的多个远程存储库的链接,并且每个存储库都有一个不同的简称。

最后一个问题,为什么我们不只是使用相同的名称?

我将用另一个示例回答这个问题。假设我们有一个朋友分叉了我们的远程存储库,以便他们可以帮助我们进行项目。并假设我们希望能够从其远程存储库中获取代码。我们可以使用命令origin来添加到我们本地存储库中远程存储库的链接。

enter image description here

在上图中,您可以看到我使用简称git remote add <shortname> <url>来指代朋友的远程存储库。您还可以看到两个远程存储库都具有相同的项目名称friend,这为我们提供了一个理由,为什么远程服务器中的远程存储库名称与本地存储库中的短名称应该不相同! >

有一个非常有用的video?解释了所有here可以找到的内容。

答案 8 :(得分:2)

这里的最佳答案:

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

  

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

答案 9 :(得分:2)

最佳答案很棒。

我只想补充一点,如果您将遥控器视为您可能想要将代码移动到的计算机以外的位置,则很容易理解。

一些非常好的例子是:

  • GitHub
  • 托管您的应用的服务器

所以你当然可以有多个遥控器。一个非常常见的模式是使用 GitHub 来存储您的代码,并使用一个服务器来托管您的应用程序(如果它是一个 Web 应用程序)。然后你会有 2 个遥控器(如果你有其他环境,可能会更多)。

尝试通过键入 git config -e

来打开您的 git 配置

注意:按escape,然后按:,然后q,然后回车退出

示例

如果您有 3 个遥控器,您可能会在 git 配置中看到以下内容。在此示例中,1 个远程(称为“origin”)是 GitHub,另一个远程(称为“staging”)是临时服务器,第三个(称为“heroku”)是生产服务器。

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
        precomposeunicode = true
[remote "origin"]
        url = https://github.com/username/reponame.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
[remote "heroku"]
        url = https://git.heroku.com/appname.git
        fetch = +refs/heads/*:refs/remotes/heroku/*
[remote "staging"]
        url = https://git.heroku.com/warm-bedlands-98000.git
        fetch = +refs/heads/*:refs/remotes/staging/*

[remote ... 开头的三行显示了我们可以推送到的遥控器。

运行 git push origin 将推送到 '[remote "origin"]' 的 url,即到 GitHub

但类似地,我们可以推送到另一个远程,例如,'[remote "staging"]',使用 git push staging,然后它会推送到 https://git.heroku.com/warm-bedlands-98000.git

在上面的示例中,我们可以看到带有 git remote 的 3 个遥控器:

git remote   
heroku
origin
staging

摘要或origin

遥控器只是互联网上您可能有理由将代码发送到的地方。 GitHub 是一个显而易见的地方,托管您的应用程序的服务器也是如此,您可能也有其他位置。 git push origin 只是意味着它将推送到“原点”,这是 GitHub 选择的默认名称。

至于branchname

branchname 就是您对遥控器pushing 的内容。根据 git push 帮助文档,branchname 参数在技术上是一个 refspec,实际上,它是您想要推送的分支。

  • git push 的文档中阅读更多内容:git push --help

答案 10 :(得分: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

答案 11 :(得分:0)

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

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

简而言之,当您键入git remote add origin <URI>时,您是在告诉本地git,每当使用单词origin时,实际上就是您指定的URI。可以将它想象成一个拥有值的变量。

就像变量一样,您可以随意命名(例如githubherokudestination等)。

答案 12 :(得分:0)

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

  • remote,级别与working directoryindexrepository

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