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


187

一个项目在Git中可以有两个(或更多)“来源”吗?

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

具体来说,添加github存储库时会出现此错误:

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

8
您可以根据需要拥有任意数量的远程存储库,但是必须给它们指定不同的名称。
菲利克斯·克林

在这种情况下,存储库名称不同。“起源”一词是否可以更改?
克里斯·杜特罗

4
是的git remote rename <old> <new>linux.die.net/man/1/git-remote。但是您也可以使用不同的方式命名Github存储库...
Felix Kling 2012年


是否可以将其中一个遥控器设置为默认值,以便在每次按下时都不会要求我明确写出该遥控器的名称?
40名侦探

Answers:


275

您可以根据需要拥有任意数量的遥控器,但是只能有一个名为“ 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

4
正如该问题可能重复出现的问题的最高票数所表示的答案-远程可以引用多个存储库。因此,您可以推送到一个远程服务器并更新两个或多个存储库,尽管不清楚这是否是OP的目标。
AD7six 2012年

但是,有哪些实际示例说明为什么要执行此操作?为什么会有一个目录指向多个存储库?每个存储库通常都有其自己的专用目录
dspacejs

4
@mightyspaj部署到Heroku的几乎每个人都有一个名为origin的远程对象和名为的远程对象heroku
meagar

@mightyspaj,或者如果您的团队正在使用叉子,并且您有时想要访问它们。我们在与不同UTC的团队一起工作的团队中做到了这一点,因此,当我们批准PR时,我们可以使用那里的fork代表那里进行基础/推送,并且能够现在(而不是明天)合并代码)。
Benoit Drapeau

有没有办法将所有本地分支机构立即推送到新的远程服务器?
Tanasis '18

89

作为对以后遇到这个问题的人的补充说明,有可能一次将源服务器推送到多个git存储库服务器。

您可以通过使用以下命令将另一个URL添加到原始远程服务器来实现。

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

8
有关此问题的更多想法,请参见以下问题
moi,2016年

3
好的,如何删除这些起源之一而不删除所有起源?
迈克尔(Michael)

@Michael您可以编辑./git/config文件并删除[remote“ origin”]部分下的url文件
Pini Cheyni

8
@Michaelgit remote set-url --delete origin ssh://git@bitbucket.org/user/myproject.git
Afrig Aminuddin

所有遥控器都必须具有相同的提交历史吗?如果我想将某些提交推送到一个远程而不是另一个上,该怎么办
卡西姆

44

这是一个带有多个遥控器的示例项目,GitHub和GitLab:

  1. 为GitHub添加远程仓库

    $ git remote add github https://github.com/Company_Name/repository_name.git
    
  2. 为GitLab添加远程仓库

    $ git remote add gitlab https://gitlab.com/Company_Name/repository_name.git
    
  3. 现在,您在项目中有多个遥控器。仔细检查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. 您如何推送到多个存储库?

    $ git push github && git push gitlab
    

2
不仅会$ git push推到所有遥控器吗?
水冷却器v2,18年

当我尝试推送github然后自动推送到gitlab时,我们遇到了问题。你能帮我吗?我想一推一推。
Mitul Marsoniya,

如果我在gitlab中有两个项目,两个存储库,该如何使用。我从一个项目获取代码,然后将其推送到另一个项目?
muzi jack

2

您可以通过提供其他名称而不是来源来将另一个远程帐户添加到您的存储库。您可以使用诸如origin2之类的名称。因此您的git命令可以修改为

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

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

对于推送使用:

git push -u origin2 master

1
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

现在您有2个起源。


1
有了这个--push选项,这个答案比其他答案更有用/更完善。
德米特里·扎伊采夫
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.