Git中的"起源"是什么?

enc*_*nce 554 git

当我跑:

git push origin branchname
Run Code Online (Sandbox Code Playgroud)

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

doe*_*eri 547

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

通过做

git push origin branchname
Run Code Online (Sandbox Code Playgroud)

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

遥控器只是存储存储库URL 的别名.您可以使用查看每个远程站点的URL

git remote -v
Run Code Online (Sandbox Code Playgroud)

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

git push git@github.com:git/git.git master
Run Code Online (Sandbox Code Playgroud)

  • 单个遥控器可以是多个其他遥控器的别名吗?如果我想要一个遥控器推送到多个其他遥控器怎么办?例如,推送到主存储库,然后推送到备份存储库?在某些情况下,这是合理的事情吗?编辑:这里有[几个解决方案](/sf/ask/59451591/)。 (2认同)
  • 如果我省略“origin”关键字怎么办?当我们说“git Push”时,它不是会将所有提交推送到远程存储库吗?添加关键字“origin”似乎是多余的。 (2认同)
  • @Mugen在“git push”的文档中,您可以看到它首先检查该存储库的配置(您可以使用“git config --list”检查)是否有名为“branch.<branchname>.remote”的密钥。如果未设置,“它默认为原点” - https://git-scm.com/docs/git-push (2认同)

Ant*_*eim 147

origin不是远程仓库名.它是一个本地别名集,作为代替远程存储库URL的密钥.

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

默认情况下,此名称是设置的,当第一次从远程克隆时,由Git设置.

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

git remote rename origin mynewalias
Run Code Online (Sandbox Code Playgroud)

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

  • 如果我省略“origin”关键字怎么办?当我们说“git Push”时,它不是会将所有提交推送到远程存储库吗?添加关键字“origin”似乎是多余的。 (3认同)

Jas*_*ski 72

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

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

  • @ Stack0verflow:这可能更好地被问为一个新问题,所以如果你好奇,人们可以做研究.'git show'已经是另一个显示提交的命令,从技术上讲,除了拥有一个名为origin的原点外,没有任何东西可以阻止你有一个名为'origin'的分支...... (5认同)

Jud*_*bas 43

origin是远程存储库的URL 的默认别名.


Tre*_*v14 21

简单!当你运行这样的命令时,"origin"就是你昵称你的远程存储库:

git remote add origin git@github.com:USERNAME/REPOSITORY-NAME.git
Run Code Online (Sandbox Code Playgroud)

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


小智 18

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

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

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

  • master远程存储库中有一个分支(别名origin).还有一个master本地创建的分支.

更多信息可以从这个SO问题中找到:Git分支:master与origin/master vs. remotes/origin/master


Ann*_*ari 17

Origin是充当远程存储库 url别名短名称

让我用一个例子来解释。

假设您有一个remote repository调用amazing-project,然后将该远程存储库克隆到您的本地计算机,以便您拥有一个local repository. 然后你会得到如下图所示的内容:

在此处输入图片说明

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

如果您运行该命令git remote -v,它将列出链接到本地​​存储库的所有远程存储库。在那里您将看到,为了从远程存储库推送或获取代码,您将使用短名称“origin”。 在此处输入图片说明

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

在此处输入图片说明

我们存储库的名称之一是它在 GitHub 或某处远程服务器上的名称。这可能有点像项目名称。在我们的情况下,这是“惊人的项目”。

我们的存储库的另一个名称是它在我们的本地存储库中的短名称,它与存储库的 URL 相关。每当我们想从该远程存储库推送或获取代码时,我们将使用它的短名称。这种短名称就像url的别名,它是我们避免使用整个长 url 来推送或获取代码的一种方式。在我们上面的例子中,它被称为origin.

那么,什么是origin

基本上, origin 是当您克隆该远程存储库时 Git 用于远程存储库的默认短名称。所以它只是默认的.

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

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

我会用另一个例子来回答这个问题。假设我们有一个朋友 fork 我们的远程存储库,以便他们可以帮助我们完成我们的项目。假设我们希望能够从他们的远程存储库中获取代码。我们可以使用该命令git remote add <shortname> <url>在本地存储库中添加指向其远程存储库的链接。

在此处输入图片说明

在上图中,您可以看到我使用短名称friend来引用我朋友的远程存储库。您还可以看到两个远程存储库具有相同的项目名称amazing-project,这就是为什么远程服务器中的远程存储库名称和本地存储库中的短名称不应该相同的原因之一!

有一个非常有用的视频 解释了所有这些,可以在这里找到。

  • 这确实帮助我比接受的答案更好地理解了!谢谢@Anna Skoulikari (3认同)

Vol*_*myr 11

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


use*_*745 7

我想补充一点,如果您将遥控器视为您可能想要将代码移动到的位置而不是计算机,那么就很容易理解。

一些非常好的例子是:

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

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

尝试通过输入打开你的 git 配置git config -e

注意:按escape、然后:、然后q然后enter退出

例子

如果您有 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/*
Run Code Online (Sandbox Code Playgroud)

以开头的三行向[remote ...我们展示了我们可以按下的遥控器。

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

但类似地,我们可以使用 推送到另一个遥控器,例如“[远程“staging”]”,git push staging然后它将推送到https://git.heroku.com/warm-bedlands-98000.git

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

git remote   
heroku
origin
staging
Run Code Online (Sandbox Code Playgroud)

总结或origin

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

至于branchname

branchname就是您push要向遥控器发送的内容。根据 git Push 帮助文档,从branchname技术上讲,参数是 a refspec,出于实际目的,它是您要推送的分支。

  • 通过运行以下命令来阅读文档中的更多内容git pushgit push --help


Ale*_*kin 5

最佳答案在这里:

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

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