Git如何玩转多个远端仓库

前言

实际开发过程中,我们有时候会遇到一个本地仓库关联着多个远端仓库的情况。那么,我们应该如何游刃有余的在两个仓库之间切换和同步代码呢?不熟悉的小伙伴,面对这个问题,一定满脸都是问号?今天,这篇文章就来给大家科普一波儿。

正文

一般情况下,我们在 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 签约作者,欢迎关注我分享更多干货!????

上一篇:Dockerfile文件常用命令详解


下一篇:为什么 Redis 单线程能达到百万+QPS?