git同时推送到多个存储库

时间:2010-11-23 12:10:20

标签: git version-control dvcs

如何让git push不仅推送到origin而且推送到另一个远程存储库?

因为git push只是git push origin的别名,我可以将git push命名为同时推送到2个远程存储库(仅使用那一个命令)吗?

我不是在寻找一个非git脚本,但是想在git中为我的本地存储库设置它。

当我尝试使用推后脚本时,我失败了。

3 个答案:

答案 0 :(得分:124)

我认为你不能仅仅通过在git上设置一个标志来实现它,但是你可以修改一个配置文件,它允许你推送到多个远程存储库而无需手动输入它们(只需在它们中键入它们)第一次而不是之后)

.git/config文件中,您可以向定义的遥控器添加多个网址:

[remote "all"]
    url=ssh://user@server/repos/g0.git
    url=ssh://user@server/repos/g1.git

如果您git push all现在推送到所有远程网址。

答案 1 :(得分:54)

无手动编辑

您可以使用带有不同网址的all直接从命令行向远程分支添加多个网址(例如git config --add remote.xyz.url

git config --add remote.all.url ssh://user@server/repos/g0.git
git config --add remote.all.url ssh://user@server/repos/g1.git

全自动

如果您超级懒惰并且不愿意多次复制/粘贴网址,那么这适合您:

function git-add-push-all() {
  while read -r name url method; do
    git config --add remote.all.url "$url"
  done < <(git remote -v | awk '!/^all/ && /push/')
}

git-add-push-all # from git (sub)directory

可以使用完整的bashy脚本(测试$name$method),但awk很甜蜜,并且每个人都有爱。

然后你可以用

推送到所有遥控器
git push all

参考

答案 2 :(得分:0)

您还可以从已配置的遥控器获取网址:

for repo in g0 g1 ...
do
    git config --add remote.all.url `git config remote.$repo.url`
done

其中g0,g1,...是遥控器的名称。