协慌网

登录 贡献 社区

从多个远程位置拉 / 推

简短的说:有没有办法将 git repo 推送到远程仓库(而不是单个 “来源”)列表并从中提取?

漫长的事情:当我在多台计算机上开发具有不同连接性的应用程序时经常遇到这种情况–例如在运输过程中使用便携式计算机,在某个位置时使用计算机 “A”,而在另一位置使用另一台计算机 “B” 而在另一个。另外,笔记本电脑可能仅与 “A” 或 “B”(有时两者)具有连接。

我想要的是 git 始终从其当前可以连接的所有计算机 “拉” 和 “推” 到它,因此从一台机器跳到另一台机器并继续无缝地工作更容易。

答案

对于现代版本的git不再需要手动执行此操作 !请参阅下面的Malvineous解决方案。

转载于此:

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

原始答案:

我已经使用了相当长的时间了,并没有造成严重的后果,由git 邮件列表上的 Linus Torvalds 建议。

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"创建合并的远程"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 remote命令配置多个远程存储库:

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

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

git remote update

如果当前未连接到任何一个遥控器,它将花费一些时间或抛出错误,然后继续下一个。您必须根据获取的组织更改的方式,手动从获取的存储库(或 “樱桃精选”)中进行合并。

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

git pull alt master

因此,实际上git pull几乎是git pull origin HEAD简写(实际上,它会在配置文件中进行确定,但您可以理解)。

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

从 git 1.8(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。