配置git同时push到两个远端库的简单方法

NELFelicia 8年前

来自: http://www.cnblogs.com/techmoe/p/5167573.html

最近在写一个开源的论坛系统,在发布代码时选择了github和coding这两个平台,我手懒,不想敲两次git push了,所以说突然有了一个很奇怪的需求:用一条git push同时push到两个远端代码库。当然说写个sh脚本当然肯定能解决,但是我对那个不太熟悉,所以说搜索了一下相关资料,找到一篇问答讨论了这个问题

以下是解决方法,转载自 终端下如何配置 git 使其可以同时 push 到两个远程仓库?

我用过两种方法,最早的时候是设定多个 remote,然后写一个 alias,比如:

$ git config alias.pushall "!git push origin && git push dev"

后来在某一个版本(忘了具体的版本号)升级之后,Git 多了一项设置,使得你可以为一个 remote 设置多个 pushurl。比如说你问题里的例子,我可以不要 remote "dev",只留下 remote "origin",然后加一句:

git remote set-url --add --push origin git@gitlab.com:root/XXX.git

在这之后,你的 remote "origin" 就变成类似如下的结构:

[remote "origin"]          url = git@github.com:SegmentFault/XXX.git          fetch = +refs/heads/*:refs/remotes/origin/*          pushurl = git@github.com:SegmentFault/XXX.git          pushurl = git@gitlab.com:root/XXX.git

如此一来,我可以直接 git push origin 就可以推向两个 repos 了。

这两种方法其实各有各的适用场景,自己取舍吧。

请注意,我亲测后发现,这篇原文中提到的加另外一个代码库的命令有错误,set-url前面不应该有"--"

原文中是

git remote --set-url --add --push origin git@gitlab.com:root/XXX.git 

这个是错的,我已经在上面引用中改正了

我该如何使用这个功能?

看完之后我试了一下,这个应该这么用

  1. 先把你要第一个push的代码用 git remote add 这种通常的办法添加好,这里将这个远端库命名为 bucket

    git remote add bucket git@git.coding.net:xxxxx
  2. 第二步,用set-url这个参数将第二个代码库添加上去

    git remote set-url --add --push bucket git@gitlab.com:root/XXX.git

    然后用git remote -v 看一下已添加的代码库,会看到类似下文的结果

    bucket  git@git.coding.net:xxxxx (fetch)  bucket  git@git.coding.net:xxxxx (push)  bucket  git@gitlab.com:root/XXX.git (push)

这样就可以了,然后试一下push代码到bucket,就可以观察到git按照顺序自动把东西push到了远端

</div>