搜尋

首頁  >  問答  >  主體

終端下如何設定 git 使其可以同時 push 到兩個遠端倉庫?

[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 同時把程式碼提交到兩個倉庫,該怎麼做?

迷茫迷茫2769 天前663

全部回覆(3)我來回復

  • 巴扎黑

    巴扎黑2017-04-27 09:05:02

    我用過兩種方法,最早的時候是設定多個 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 了。

    這兩種方法其實各有各的適用場景,自己取捨吧。

    回覆
    0
  • 世界只因有你

    世界只因有你2017-04-27 09:05:02

    既然有被牆的危險,就有兩個倉庫不同步的蛋疼事。還不太麻煩..
    實在要這麼做的話,就寫個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
    

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-27 09:05:02

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

    SegmentFault同樣的問題:
    /q/1010000000367632/a-1020000000369754
    /q/1010000000411859/a-102001000411859/a-102001000

    回覆
    0
  • 取消回覆