git-pullall () { for RMT in $(git remote); do git pull -v $RMT $1; done; }
alias git-pullall=git-pullall
git-pushall () { for RMT in $(git remote); do git push -v $RMT $1; done; }
alias git-pushall=git-pushall
用法:
git-pullall master
git-pushall master ## or
git-pushall
14 回答
您可以使用
git remote
命令配置多个远程存储库:要从所有已配置的远程数据库获取并更新跟踪分支,但不要合并到HEAD,请执行以下操作:
如果它当前没有连接到其中一个遥控器,则需要时间或抛出错误,然后继续下一个 . 您必须从获取的存储库或者挑选中手动合并,具体取决于您希望如何组织收集更改 .
要从alt获取主分支并将其拉入当前头部,请执行以下操作:
所以事实上
git pull
几乎是git pull origin HEAD
的简写(实际上它在配置文件中查找以确定这一点,但你明白了) .要推送更新,您必须手动对每个仓库执行此操作 . 我认为,推动设计时考虑了中央存储库工作流程 .
Doing this manually is no longer necessary ,现代版
git
!请参阅下面的Malvineous的解决方案 .转载于此:
原始答案:
这件事我已经使用了很长一段时间没有不良后果,并且由Linus Torvalds在git mailing list上提出建议 .
araqnid 的解决方案是将代码放入存储库的正确解决方案......但是当你像我一样,有多个等效的权威上游(我将一些更重要的项目克隆到私有上游,GitHub和Codaset),它每天都要将变化推向每一个人,这可能是一种痛苦 .
长话短说,
git remote add
所有你的遥控器单独...然后git config -e
并添加一个合并遥控器 . 假设您有此存储库config
:...为
"Paws"
和"Codaset"
创建一个合并的遥控器,我可以在所有这些之后添加以下内容:一旦我完成了这个,当我
git push Origin Master
时,它将依次推向Paws/Master
和Codaset/Master
,让生活变得更轻松 .最新版本的git(截至2012年10月)允许您从命令行执行此操作:
然后
git push
将推送到user1 @ repo1,然后推送到user2 @ repo2 . 如果您也希望能够从他们那里git pull
,请忽略--push
.我将这些别名添加到〜/ .bashrc中:
您可以添加遥控器:
然后更新所有repos做:
这是我在
.gitconfig
别名部分中使用bash脚本的示例我在.git congfig文件中向远程"origin"添加了两个单独的pushurl . 当我运行
git push origin "branchName"
然后它将运行并推送到每个网址 . 不确定是否有更简单的方法来实现这一点,但这适用于我自己推送到Github源代码并同时推送到My.visualStudio源代码 .你需要一个脚本来循环它们 . Git没有提供“全力以赴” . 理论上你可以在多个线程中进行推送,但是本机方法不可用 .
抓取更复杂,我建议线性地做 .
我认为你最好的答案是拥有一台机器,每个人都可以推/拉,如果可能的话 .
我冒昧地扩大了来自nona-urbiz的answer;只需将其添加到〜/ .bashrc中:
用法:
如果你没有为git-pullall提供任何分支参数,则非默认遥控器的拉动将失败;保持这种行为,因为它类似于git .
为了更新遥控器(即
pull
案例),事情变得更加容易 .莱纳斯的声明
在elliottcable's answer中的Git mailing list的引用条目中不再是真的 .
git fetch在过去的某个地方学习了
--all
参数,允许一次性获取所有遥控器 .如果不是全部请求,可以使用
--multiple
开关来指定多个遥控器或a组 .使用以下命令为全局gitconfig(/home/user/.gitconfig)添加别名 .
一旦你提交代码,我们说
默认情况下推送到原点 . 在上面的别名之后,我们可以说
并且代码将更新到包括origin remote的所有遥控器 .
我想在VSO / TFS中工作,然后在准备好时公开推送到GitHub . 在私人VSO中创建的初始仓库 . 到了加入GitHub的时候我做了:
像冠军一样工作......
要进行健全性检查,请发出“git remote -v”以列出与项目关联的存储库 .
简单的方式,为我工作...希望这有助于某人 .
添加
all
遥控器有点繁琐,因为您必须在您使用的每台机器上进行设置 .此外,
bash
和git
别名提供了所有假设您将推送到 all 遥控器 . (例如:我有一个sshag
的分支,我在github和gitlab上维护 . 我添加了上游远程,但我没有权限推送它 . )这是一个
git
别名,只推送带有包含@
的推送网址的遥控器 .psall = "!f() { \ for R in $(git remote -v | awk '/@.*push/ { print $1 }'); do \ git push $R $1; \ done \ }; f"