一个项目可以有两个(或更多)Git中的“origins”?
我想将一个项目同时推送到github和Heroku服务器。
具体来说,在添加github存储库时出现这个错误:
$ git remote add origin https://github.com/Company_Name/repository_name.git fatal: remote origin already exists.
你可以有任意多个遥控器,但你只能有一个名为“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:
$ git remote add github https://github.com/Company_Name/repository_name.git
Add remote repo for GitLab
$ git remote add gitlab https://gitlab.com/Company_Name/repository_name.git
Now you have multiple remotes in the project. Double check with git remote -v
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)
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 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。其余链接需要有不同的名称。
origin
因此,为了正确地回答这个问题,我们需要了解什么是起源。
让我用一个例子来解释。
假设你有一个名为amazing-project的remote repository,然后你将这个远程存储库克隆到你的本地机器上,这样你就有了一个local repository。然后你就会得到如下图所示的结果:
amazing-project
remote repository
local repository
因为您克隆了存储库。远程存储库和本地存储库是有关。
现在,这可能有点令人困惑,因为在GitHub(或远程服务器)项目被称为“amazing-project”。那么,为什么远程存储库看起来有两个名称呢?
我们的存储库的名字之一是它在GitHub或某个远程服务器上的名字。这有点像项目名称。在我们的例子中,这是‘amazing-project’。
我们的存储库的另一个名称是短,它在本地存储库中与存储库的URL相关。当我们想要从远程存储库中推送或获取代码时,我们将使用这个短名称。这个短名有点像url的别名,这是我们避免为了推取代码而使用整个长url的一种方式。在上面的例子中,它被称为origin。
那么,origin是什么?
基本上origin是当你克隆远程存储库时Git用于远程存储库的默认的缩写名。所以它就是默认的。
在很多情况下,你会在你的本地存储库中有多个远程存储库的链接,每个链接都有一个不同的短名称。
最后一个问题,为什么我们不使用相同的名字呢?
我将用另一个例子来回答这个问题。假设我们有一个朋友对我们的远程存储库进行分叉,这样他们就可以在我们的项目中帮助我们。让我们假设我们希望能够从他们的远程存储库中获取代码。我们可以使用git remote add <shortname> <url>命令在本地存储库中添加到他们的远程存储库的链接。
git remote add <shortname> <url>
在上图中,你可以看到我使用缩写friend来引用我朋友的远程存储库。您还可以看到两个远程存储库具有相同的项目名称amazing-project,这为我们提供了远程服务器中的远程存储库名称和本地存储库中的简称不应该相同的一个原因!
friend
有一个非常有用的视频📹解释了所有这些可以在在这里中找到。
可以使用 而不是原点使用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