将更改推送到原点(上游)后如何将更改推送到另一个远程?

How to push changes to another remote after pushing them to origin (upstream)?

我正在使用 Visual Studio 的 Git 集成将我的更改推送到 https://dev.azure.com。今天我创建了一个 GitHub 存储库,并使用 Visual Studio Git 根文件夹中的这些命令将我的主要更改添加为我的 GitHub 存储库的远程:

git remote add upstream https://github.com/user/repo
git push upstream master

现在我在 GitHub 中有了所有更改的副本。当我在 Visual Studio 中进行新更改并将它们推送到 https://dev.azure.com 时,我希望它们也被推送到 GitHub。我听说了 Git 个钩子。所以我在 post-receive 脚本中写了这个:

#!/bin/sh
git push upstream master
exit 0

但是当我从 Visual Studio 推送我的更改时,我的 GitHub 存储库没有更新,所以我必须手动 git push upstream master

我做错了什么?

post-receive 挂钩是服务器端挂钩,这意味着只有在远程安装它才有意义,在这种情况下很可能是不可能的。例如,参见 here or here

实现您想要的效果的一种方法是改用 pre-push 挂钩。在这种情况下,当您推送到 Azure 时,脚本将首先 运行(推送之前),并且仅当脚本以状态 0 退出(即成功)时才会尝试推送。

为了回答我自己的问题,我发现 this article 清楚地解释了如何为同时推送添加遥控器(使用一个 git push 命令)。

简而言之,您可以通过这种方式配置多个遥控器同时推送:

git remote add all first_remote_url
git remote set-url --add --push all first_remote_url
git remote set-url --add --push all second_remote_url

就是这样!现在您可以使用以下命令推送到两个遥控器:

git push all

奖励:虽然您不能从多个回购中提取信息,但您可以这样做以从所有远程回购中获取信息:

git fetch --all