某一天,你在github上看到了一个很棒的仓库,你觉得不错,于是你fork了这个仓库。但是某一天,仓库原作者修改了一些bug和增加了一些功能。按照理想状态下,好像觉得这个源仓库都更新了,那么我拷贝的这个仓库也会自动同步更新吧?

真实情况其实是:并不会自动更新,因为如果git这样设计的话会造成一些不可预知的情况发生。同步源仓库是理想状态下实现的效果,但是如果我们在完成自己的项目的时候,突然源仓库更新了,结果你现在项目的一些逻辑和之前不匹配了,这问题就大了。

在实际开发过程中经常会遇到上这样一种场景,需要同步上游仓库的代码。

方法一

回到正题:git如何同步上游仓库(以apisix-dashboard仓库为例)

因为记录这篇文章也是我学习的过程,所以我会从头开始慢慢讲解,以方便初学者查阅。

一.首先打开github

看到我们之前fork过的仓库,点进去会看到醒目的一个Fetch upstream

image.png

image.png

点击Compare按钮会出现到一个比较当前仓库和更新后仓库不同的地方,你可以通过这里简单的查看文件有哪些差异。

image.png

点击 Fetch and merge按钮,看到这两个单词,其实我们已经能猜出来它的功能是什么了,git fetch and git merge,具体实现了什么,我们马上就会解释。(下面是点击以后的界面)

image.png

这里需要解释清楚的是,这一步仅仅是将你自己fork的仓库代码和源仓库代码同步了,但是你本地工作区的仓库还没有更新。

二.回到vscode

执行git pull命令,将远程自己仓库的代码拉到自己的工作区即可。

image.png

如果已经是最新的代码,会出现下面的提示。

image.png


方法二

在这里需要进一步补充的内容是。其实上面的方法是接下来要讲的内容的语法糖(可以这么理解)

我们某一天不能查看github,但是我们知道上游仓库已经更新,想要把本地仓库更新为最新的上游仓库,和源仓库代码保持一致呢?这样该怎么办呢?(还有一种简单的,把现在的仓库删除,重新fork,然后重新clone也可,这里不讨论)

一.打开终端切换到当前代码路径下

输入git remote,查看你当前远程仓库

image.png

这个代表什么意思呢?简单理解就是,本地工作区只和这个origin远程仓库发生关系,不管是fetch 和 push 其实都是操作的这个仓库。如果在当前目录下执行git fetch命令,其实相当于写了git fetch origin master只不过省略了后面的origin mater而已。

那我们应该如何和远程上游仓库建立起联系呢?这里需要用到git remote add <name> <url>这个命令,具体怎么实现如下:

<name>是我们自定义设置的,关键就是这个url在哪里获取?

首先,点击这里进入到源仓库

image.png

然后复制这里的地址即可

image.png

切换到终端执行下面命令

image.png

输入git remote -v查看现在远程仓库的信息

image.png

二.追踪查看上游代码

输入git fetch upstream master命令,注意这里如果使用git fetch其实还是默认拉下来origin的代码,一定要fetch upstream,这样才是把上游代码拉到本地查看。(我这里写了master,意思就是只拉下来上游master分支查看,省略的话就是拉下全部分支的代码)

image.png

接下来就是merge upstream/master

image.png

image.png

三.推送到origin 仓库

git push即可

现在你的仓库已经和上游master仓库同步了~


FFF方
451 声望12 粉丝