如何使用不同的设置推送到多个git存储库?

时间:2016-07-22 10:56:53

标签: git git-push git-remote

我有几个不同push配置的遥控器; e.g。

[remote "public"]
    url = ssh://external-server/repo
    push = refs/heads/master:refs/heads/master

[remote "internal"]
    url = ssh://internal-server/repo
    push = refs/heads/*:refs/heads/*

是否可以使用一个简单的命令推送到两个存储库而无需发明其他图层?

我按照相关问题的建议尝试pushUrl,但这需要一个网址,不允许使用远程网址。然后,我将其修改为使用{/ 1}},如

git-remote-ext

但这仅推送到第一个存储库,然后使用

失败
[remote "all"]
    pushUrl = "ext::git push public"
    pushUrl = "ext::git push internal"

手动shell命令(fatal: Could not read from remote repository. )不是解决方案,因为实际上我有很多存储库,它们具有不同的遥控器集(例如客户托管的git服务器,公共存储库,内部/外部镜像,测试系统,只读源)。有时它们处于子模块中,我希望以类似

的方式进行推送
git push public && git push internal

定义一个别名可能会起作用,但是太笨拙并且会以某种方式打破通常的工作流程(使用git submodule foreach 'git push all' 来推送)。

1 个答案:

答案 0 :(得分:1)

相关问题应为“Git - Pushing code to two remotes”,并且涉及使用推送网址的远程“all”。

ext::git push public不是网址。 ssh://external-server/repo是。

git remote rm all 
git remote add all ssh://internal-server/repo
git remote set-url --add --push all ssh://internal-server/repo
git remote set-url --add --push all ssh://external-server/repo

默认情况下,它会使用push refspec refs/heads/*:refs/heads/*

如果将默认推送策略设置为上游,则只会推送具有上游分支的分支。

git config push.default simple