做空者:有没有一种方法可以让git回购推送到远程回购列表(而不是一个单一的“来源”)中并从中提取?
长篇大论:当我在多台电脑上开发一个应用程序时,我经常会遇到这样的情况,这些电脑具有不同的连接能力——比如,一台笔记本电脑在运输途中,一台电脑“a”在某个位置,另一台电脑则“B”在另一台位置。此外,笔记本电脑可能只与“A”或“B”连接,有时两者都连接。
我希望git始终“拉”到它当前可以连接的所有计算机,这样从一台机器跳到另一台机器,继续无缝工作就更容易了。
做空者:有没有一种方法可以让git回购推送到远程回购列表(而不是一个单一的“来源”)中并从中提取?
长篇大论:当我在多台电脑上开发一个应用程序时,我经常会遇到这样的情况,这些电脑具有不同的连接能力——比如,一台笔记本电脑在运输途中,一台电脑“a”在某个位置,另一台电脑则“B”在另一台位置。此外,笔记本电脑可能只与“A”或“B”连接,有时两者都连接。
我希望git始终“拉”到它当前可以连接的所有计算机,这样从一台机器跳到另一台机器,继续无缝工作就更容易了。
当前回答
我在~/.bashrc中添加了这些别名:
alias pushall='for i in `git remote`; do git push $i; done;'
alias pullall='for i in `git remote`; do git pull $i; done;'
其他回答
为了更新遥控器(即拉杆箱),事情变得更容易了。
莱纳斯的声明
可悲的是,根本没有办法用一个数字来伪装别名
elliottcable的答案不再为真。
gitfetch在过去的某个地方学习了--all参数,允许一次性获取所有遥控器。
如果没有全部请求,可以使用--multiple开关来指定多个远程或一个组。
你需要一个脚本来循环它们。Git不提供“推送全部”。理论上可以在多个线程中进行推送,但本地方法不可用。
提取甚至更复杂,我建议线性地进行。
我认为你最好的答案是有一台机器,如果有可能的话,每个人都可以推/拉它。
添加新远程
git remote add upstream https://github.com/example-org/example-repo.git
git remote -vv
从多个位置提取
git fetch --all
推送至位置
git push -u upstream/dev
您可以使用gitremote命令配置多个远程存储库:
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),那么每天都要对每个项目进行更改可能会很痛苦。
长话短说,gitremote单独添加所有远程……然后git-config-e并添加一个合并的远程。假设您有此存储库配置:
[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
一旦我做到了这一点,当我按下Origin Master时,它将按顺序推送到Paws/Master和Codaset/Master,这让生活变得简单了一点。