时间:2020-3-30
背景:
笔者想使用git连接两个远程仓库的目的真的很单纯:笔者有两个远程仓库,Gitee和GitHub。在这个如此长的假期中,我无聊的时候就在一个人敲代码,不把两个都刷绿格实在可惜这些资源。
so,把它们刷绿!但是每天分成两次提交今日份代码,我实在感觉有点疲惫。
so,还是在一个本地仓库中,同时连接两个远程仓库吧!
前期准备
- 建立多个远程仓库,本文是在Gitee和GitHub上同时建立的远程仓库。
- 在GitHub上绑定SSH密钥。若不绑定,则每次push都会要求输入账户和密码。
上述工作,均可直接在网上搜索到,这里不再赘述。
具体步骤
1、在本地目录新建代码仓库,配置好全局信息
git init
git config --global user.name "username"
git config --global user.email "email"
2、通过SSH密钥github仓库和gitee仓库
git remote add github git@github.com:zhoukuansky/test.git
git remote add gitee git@gitee.com:zhoukuansky/test.git
使用 git remote -v 命令查看,表明已经关联成功远程仓库。
3、更新仓库测试,推送测试出现错误
更新本地仓库,这里先使用gitee远程仓库更新本地信息,其次是github
git pull gitee master
git pull github master
可以看到,这里先使用的gitee仓库拉取更新成功,但是后面使用的github拉取更新显示失败。由于这是两个不同的仓库,无论谁后被pull更新,都会失败。
失败原因:refusing to merge unrelated histories(拒绝合并两段不相关的历史)
由此,测试push也必然失败。
4、解决方法
经过简单的思考,笔者采用以下两种解决办法:
方法一:强制融合两段不相干的分支历史:
git pull github master --allow-unrelated-histories
合并成功。
更改 readme.md 测试push到两个远程仓库:
git commit -am "test"
git push gitee master
git push github master
显示成功!
方法二:强制推送到github库,将之覆盖:(多人合作时,极其不建议使用)
这里由于是新建的test项目,担任操作,不怕丢失文件, 所以可以采用这种方法。
git push github master --force
成功!
多个仓库的操作方法类似。
5、小小优化
当本地仓库关联上多个远程,每次推送的时候都需要两次push。
所以,使用以下代码同时在origin上关联两个远程:
git remote add origin git@github.com:zhoukuansky/test.git
然后,打开代码仓库的本地版本库中的config文件,即/.git/config(.git文件一般是隐藏的,需要打开隐藏文件查看),修改如下:
保存好后,更改 readme.md 测试push到两个远程仓库:
git commit -am "test2"
git push -u orgin master
OVER!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。