时间:2020-3-30

背景:
笔者想使用git连接两个远程仓库的目的真的很单纯:笔者有两个远程仓库,Gitee和GitHub。在这个如此长的假期中,我无聊的时候就在一个人敲代码,不把两个都刷绿格实在可惜这些资源。
so,把它们刷绿!但是每天分成两次提交今日份代码,我实在感觉有点疲惫。
so,还是在一个本地仓库中,同时连接两个远程仓库吧!

前期准备

  1. 建立多个远程仓库,本文是在Gitee和GitHub上同时建立的远程仓库。
  2. 在GitHub上绑定SSH密钥。若不绑定,则每次push都会要求输入账户和密码。

上述工作,均可直接在网上搜索到,这里不再赘述。

具体步骤

1、在本地目录新建代码仓库,配置好全局信息

git init
git config --global user.name "username"
git config --global user.email "email" 

2、通过SSH密钥github仓库和gitee仓库

ssh

git remote add github git@github.com:zhoukuansky/test.git   
git remote add gitee git@gitee.com:zhoukuansky/test.git   

使用 git remote -v 命令查看,表明已经关联成功远程仓库。
test2

3、更新仓库测试,推送测试出现错误

更新本地仓库,这里先使用gitee远程仓库更新本地信息,其次是github

git pull gitee master
git pull github master

test3
可以看到,这里先使用的gitee仓库拉取更新成功,但是后面使用的github拉取更新显示失败。由于这是两个不同的仓库,无论谁后被pull更新,都会失败。
失败原因:refusing to merge unrelated histories(拒绝合并两段不相关的历史)
由此,测试push也必然失败。

4、解决方法

经过简单的思考,笔者采用以下两种解决办法:
方法一:强制融合两段不相干的分支历史:

git pull github master --allow-unrelated-histories

test4
合并成功。
更改 readme.md 测试push到两个远程仓库:

git commit -am "test"
git push gitee master
git push github master

test5
显示成功!

方法二:强制推送到github库,将之覆盖:(多人合作时,极其不建议使用)
这里由于是新建的test项目,担任操作,不怕丢失文件, 所以可以采用这种方法。

git push github master --force

test6
成功!
多个仓库的操作方法类似。

5、小小优化

当本地仓库关联上多个远程,每次推送的时候都需要两次push。
所以,使用以下代码同时在origin上关联两个远程:

git remote add origin git@github.com:zhoukuansky/test.git      

然后,打开代码仓库的本地版本库中的config文件,即/.git/config(.git文件一般是隐藏的,需要打开隐藏文件查看),修改如下:
test7

保存好后,更改 readme.md 测试push到两个远程仓库:

git commit -am "test2"
git push -u orgin master

test8
OVER!


zksky
1 声望0 粉丝

I think,therefore I exist.