关于版本控制:git同时推送到多个存储库

git push to multiple repositories simultaneously

本问题已经有最佳答案,请猛点这里访问。

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

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

我不是在这里寻找一个非Git脚本,而是想在Git中为我的本地存储库设置这个脚本。

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


我不认为你只需要在git上设置一个标志就可以做到这一点,但是你可以修改一个配置文件,这样你就可以在不手动输入所有内容的情况下,将它们推送到多个远程存储库(只在第一次输入它们,而不是在之后输入它们)。

.git/config文件中,可以将多个URL添加到定义的远程:

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

如果您现在是git push all,那么您将推送到所有远程URL。


无手动编辑

您可以直接从命令行向远程分支(例如all添加多个URL,方法是使用git config --add remote.xyz.url和不同的URL:

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

号全自动

如果您非常懒惰,并且多次不愿意复制/粘贴URL,那么这是为您准备的:

1
2
3
4
5
6
7
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

一个完整的害羞的脚本是可能的(测试$name$method),但awk是甜蜜的,有对每个人的爱。

然后你可以用

1
git push all

。工具书类

  • Git配置(1)手册页


您还可以从配置的远程服务器获取URL:

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

其中g0,g1,…是你的遥控器的名字。