终端下如何配置 git 使其可以同时 push 到两个远程仓库?
迷茫
迷茫 2017-04-27 09:03:02
0
3
675
[remote "origin"]
        url = git@github.com:SegmentFault/XXX.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[remote "dev"]
        url = git@gitlab.com:root/XXX.git
        fetch = +refs/heads/*:refs/remotes/dev/*

config 中配置了两个远程仓库。我想终端下一句 git push 同时把代码提交到两个仓库,该怎么做?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(3)
巴扎黑

我用过两种方法,最早的时候是设定多个 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 了。

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

世界只因有你

既然有被墙的危险,就有两个仓库不同步的蛋疼事。还不是很麻烦..
实在要这么做的话,就写个shell文件吧。

#!/bin/bash
git push origin master
git push dev master
#以上,根据你自己的要求调整一下.

然后别忘了让它成为可执行的:(假设脚本叫push.sh

JerryMac:Dev Jerry$ chmod +x ./push.sh
JerryMac:Dev Jerry$ ./push.sh
大家讲道理

答案:http://blog.codepiano.com/2013/07/03/push-multi-remote-repositories/

SegmentFault同样的问题:
/q/1010000000367632/a-1020000000369754
/q/1010000000411859/a-1020000000411882

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板