前言
实际开发过程中,我们有时候会遇到一个本地仓库关联着多个远端仓库的情况。那么,我们应该如何游刃有余的在两个仓库之间切换和同步代码呢?不熟悉的小伙伴,面对这个问题,一定满脸都是问号?今天,这篇文章就来给大家科普一波儿。
正文
一般情况下,我们在 GitHub 上新建一个仓库后,GitHub 会给出三种常规操作的示例方法。告诉如何把本地的一个项目关联到 GitHub 的仓库上。
这里简单说一下都有哪三种情况。
情况一、本地还有工程目录
这种情况比较简单,我们只需要同步云端仓库,本地就会自动创建工程目录,操作方法和命令如下:
git clone git@git.lozen.com:LLL/gloud/bominio.git cd bominio touch README.md git add README.md git commit -m "add README" git push -u origin master
情况二、本地已经存在工程目录
这种情况,我们需要进入对应的工程目录,先执行git init
命令,操作方法和命令如下:
cd existing_folder git init git remote add origin git@git.lozen.com:LLL/gloud/bominio.git git add . git commit -m "Initial commit" git push -u origin master
情况三、本地已经存在工程目录且已经关联其他仓库
这种情况,就是我们今天要讨论的内容。主要的难点在于定义远端仓库的名字和仓库切换,先说一下操作方法和命令如下:
cd existing_repo git remote rename origin old-origin git remote add origin git@git.lozen.com:LLL/gloud/bominio.git git push -u origin --all git push -u origin --tags
当我们把仓库弄混之后,很容易会错误的把该属于A仓库的代码推到B仓库上,从而导致错误,常见的错误如下:
fatal: unable to access 'github.com/minio/minio…': LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443
想解决这种情况,就需要我们把远程仓库的管理搞明白。下面通过一个实例,来介绍如果修改远程仓库的名字。我们可以通过命令git remote -v
查看当前仓库的所有关联的远程仓库地址,比如:
localhost:bominio lz$ git remote -v
borigin git@git.lozen.com:LLL/gloud/bominio.git (fetch)
borigin git@git.lozen.com:LLL/gloud/bominio.git (push)
origin github.com/minio/minio… (fetch)
origin github.com/minio/minio… (push)
通过上面的输出结果,我们可以知道 bominio 仓库关联了两个远程仓库,分别是 borigin 和 origin。此时,如果我们想把自己的仓库名 borigin 改成 origin 的话,需要怎么操作呢?说到这里,我突然想到了超级简单的笔试题:写一个算法,交换变量a和变量b的值。是的,原理差不多!我们需要先把占着 origin 名字的仓库改成别的名字,再把我们自己的仓库改成 origin 。具体的操作如下:
// 先把 origin 名字的仓库改成别的名字
localhost:bominio lz$ git remote rename origin old-origin
localhost:bominio lz$ git remote -v
borigin git@git.lezon.com:LLL/gloud/bominio.git (fetch)
borigin git@git.lezon.com:LLL/gloud/bominio.git (push)
old-origin github.com/minio/minio… (fetch)
old-origin github.com/minio/minio… (push)
修改自己仓库的名字,命令如下:
localhost:bominio lz$ git remote rename borigin origin
此时,再查看两个远程仓库的名字,我们发现已经OK啦。
localhost:bominio lz$ git remote -v
old-origin github.com/minio/minio… (fetch)
old-origin github.com/minio/minio… (push)
origin git@git.lozen.com:LLL/gloud/bominio.git (fetch)
origin git@git.lozen.com:LLL/gloud/bominio.git (push)
改名字的问题已经搞定啦,接下来再说同步代码的事情。既然我们已经可以通过名字来区分不同的远程仓库,那么在同步代码的时候,就需要为每一条命令指明仓库对象。比如,平时我们同步代码只需要执行git pull
,就可以把远端仓库代码同步到本地,但是当存在多个远程仓库时,就需要执行git pull origin
。
结尾
好了,关于使用 Git 玩转多个远程仓库的内容就介绍完了。其实,很多问题都是这样,不是有多难,只是你不知道而已。感兴趣的小伙伴,赶紧动手尝试吧!我是 liuzhen007(别名:Data-Mining),欢迎评论留言+一键三连。
作者简介:😄大家好,我是 Data-Mining(liuzhen007),是一位典型的音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,😄公众号:玩转音视频。同时也是 CSDN 博客专家、华为云享专家(共创编辑)、InfoQ 签约作者,欢迎关注我分享更多干货!😄