从多个远程位置拉/推
简而言之:有没有办法让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/Master
和Codaset/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
从他们。