一个项目可以有多个起源吗?

一个项目可以有两个(或更多)Git中的“origins”?

我想将一个项目同时推送到githubHeroku服务器。

具体来说,在添加github存储库时出现这个错误:

$ git remote add origin https://github.com/Company_Name/repository_name.git
fatal: remote origin already exists.
118448 次浏览

你可以有任意多个遥控器,但你只能有一个名为“origin”的远程端。名为“origin”的远程服务器在任何方面都不特殊,除了它是Git在克隆现有存储库时创建的默认远程服务器。您可以配置第二个远程,从该远程上推/拉,并设置一些分支从该远程而不是原点跟踪分支。

尝试添加一个名为“github”的远程代替:

$ git remote add github https://github.com/Company_Name/repository_name.git


# push master to github
$ git push github master


# Push my-branch to github and set it to track github/my-branch
$ git push -u github my-branch


# Make some existing branch track github instead of origin
$ git branch --set-upstream other-branch github/other-branch

值得注意的是,可以一次将origin推到更多的而不是一个git存储库服务器。

可以通过使用以下命令向源远程添加另一个URL来实现这一点。

git remote set-url --add origin ssh://git@bitbucket.org/user/myproject.git

下面是一个带有多个遥控器的示例项目,GitHub &GitLab:

  1. 为GitHub添加远程回购

    $ git remote add github https://github.com/Company_Name/repository_name.git
    
  2. Add remote repo for GitLab

    $ git remote add gitlab https://gitlab.com/Company_Name/repository_name.git
    
  3. Now you have multiple remotes in the project. Double check with git remote -v

    $ git remote -v
    github https://github.com/Company_Name/repository_name.git (fetch)
    github https://github.com/Company_Name/repository_name.git (push)
    gitlab https://gitlab.com/Company_Name/repository_name.git (fetch)
    gitlab https://gitlab.com/Company_Name/repository_name.git (push)
    
  4. How do you push to multiple repositories?

    $ git push github && git push gitlab
    

您可以通过指定不同的名称来添加另一个远程帐户到您的存储库中。您可以使用名称,如origin2。 所以你的git命令可以修改为

git remote add origin2 https://github.com/Company_Name/repository_name.git
git remote add origin2 https://github.com/Company_Name/repository_name.git

对于推送使用:

git push -u origin2 master
git remote set-url --add --push origin git@github.com:user/my-project.git
git remote set-url --add --push origin git@bitbucket.org:user/my-project.git

现在你有两个原点。

一个本地存储库可以链接到多个远程存储库

然而,只有一个链接可以被称为origin。其余链接需要有不同的名称

因此,为了正确地回答这个问题,我们需要了解什么是起源。

让我用一个例子来解释。

假设你有一个名为amazing-projectremote repository,然后你将这个远程存储库克隆到你的本地机器上,这样你就有了一个local repository。然后你就会得到如下图所示的结果:

enter image description here

因为您克隆了存储库。远程存储库和本地存储库是有关

如果你运行git remote -v命令,它将列出所有链接到本地存储库的远程存储库。在那里你会看到,为了从远程存储库中推入或获取代码,你将使用 'origin'。 enter image description here < / p >

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

enter image description here

我们的存储库的名字之一是它在GitHub或某个远程服务器上的名字。这有点像项目名称。在我们的例子中,这是‘amazing-project’。

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

那么,origin是什么?

基本上origin是当你克隆远程存储库时Git用于远程存储库的默认的缩写名。所以它就是默认的

在很多情况下,你会在你的本地存储库中有多个远程存储库的链接,每个链接都有一个不同的短名称。

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

我将用另一个例子来回答这个问题。假设我们有一个朋友对我们的远程存储库进行分叉,这样他们就可以在我们的项目中帮助我们。让我们假设我们希望能够从他们的远程存储库中获取代码。我们可以使用git remote add <shortname> <url>命令在本地存储库中添加到他们的远程存储库的链接。

enter image description here

在上图中,你可以看到我使用缩写friend来引用我朋友的远程存储库。您还可以看到两个远程存储库具有相同的项目名称amazing-project,这为我们提供了远程服务器中的远程存储库名称和本地存储库中的简称不应该相同的一个原因!

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

可以使用 而不是原点使用GitHub或GitLab

对于github在地方的起源使用github

git remote add github https://github.com/repository_name.git
git push github branchname

对于gitlab,请使用gitlab

git remote add gitlab https://github.com/repository_name.git
git push gitlab branchname

您可以按照以下步骤将更改从现有存储库推送到新远程中。

cd existing_repo

重命名当前远程(可选)

git remote rename origin old-origin

添加新的远程(此处使用的原点)

git remote add origin https://github.com/repository_name.git

现在您可以将代码推到新的origin远程

git push -u origin --all
git push -u origin --tags