从多个远程位置拉/推

简而言之:有没有办法让git repo推送到远程回购列表(而不是单个“起源”)?

漫长的:当我在多台计算机上开发应用程序时,我经常遇到这种情况,它们具有不同的连接性 - 例如在运输途中使用笔记本电脑,在我处于某个位置时使用计算机“A”,以及使用另一台计算机“B “而另一个。 此外,笔记本电脑可能只与“A”或“B”连接,有时两者都连接。

我想让git总是从当前连接的所有计算机上“拉”和“推”到所有计算机上,因此从一台计算机跳到另一台计算机并继续无缝工作更容易。


您可以使用git remote命令配置多个远程存储库:

git remote add alt alt-machine:/path/to/repo

要从所有配置的遥控器和更新跟踪分支中获取,但不合并到HEAD中,请执行以下操作:

git remote update

如果当前没有连接到其中一个遥控器,则需要时间或发生错误,然后继续下一个。 您必须从提取的存储库手动合并,或根据您希望如何组织收集更改进行挑选。

要从alt获取主分支并将其拉入当前头部,请执行以下操作:

git pull alt master

所以实际上git pull几乎是git pull origin HEAD缩写(实际上它在配置文件中查看来确定这一点,但你明白了)。

对于推送更新,您必须手动执行每个回购。 我认为,设计时考虑到了中央存储库工作流程。


手动执行此操作不再需要 ,使用现代版本的git ! 见下面Malvineous的解决方案。

转载于此:

git remote set-url origin --push --add <a remote>
git remote set-url origin --push --add <another remote>

原始答案:

这是我已经使用了一段时间没有不良后果,并由Linus Torvalds在git邮件列表中提出的建议。

araqnid的解决方案是将代码引入你的仓库的正确解决方案......但是当你像我一样拥有多个等效的权威上游(我将一些更关键的项目克隆到私有上游,GitHub和Codaset)时,它可能是一个痛苦的推动每一个变化,每一天。

长话短说, git remote add所有的遥控器......然后git config -e并添加一个合并遥控器。 假设你有这个仓库config

[remote "GitHub"]
    url = git@github.com:elliottcable/Paws.o.git
    fetch = +refs/heads/*:refs/remotes/GitHub/*
[branch "Master"]
    remote = GitHub
    merge = refs/heads/Master
[remote "Codaset"]
    url = git@codaset.com:elliottcable/paws-o.git
    fetch = +refs/heads/*:refs/remotes/Codaset/*
[remote "Paws"]
    url = git@github.com:Paws/Paws.o.git
    fetch = +refs/heads/*:refs/remotes/Paws/*

...为"Paws""Codaset"创建一个合并远程,我可以添加以下所有内容:

[remote "Origin"]
    url = git@github.com:Paws/Paws.o.git
    url = git@codaset.com:elliottcable/paws-o.git

一旦我完成了这个任务,当我git push Origin Master ,它会依次推到Paws/MasterCodaset/Master ,让生活变得更轻松。


最新版本的git(截至2012年10月)允许您从命令行执行此操作:

git remote set-url origin --push --add user1@repo1
git remote set-url origin --push --add user2@repo2
git remote -v

然后git push会推送到user1 @ repo1,然后推送到user2 @ repo2。 离开了--push如果你也希望能够git pull从他们。

链接地址: http://www.djcxy.com/p/8763.html

上一篇: pull/push from multiple remote locations

下一篇: ActiveRecord Custom Type Naming Scheme