github如何实现fork的项目与原项目同步

refer to https://www.jianshu.com/p/fede3333205f

作者:hitchc
链接:https://www.jianshu.com/p/fede3333205f
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

在github上,当看到好的项目代码时,有两种方式可以将代码“下载”到本地。一是可以直接clone原项目,二是通过github的“fork”功能“拷贝”项目到我们自己的主页上,再从主页上clone“拷贝项目”。

两种方式最重要的区别是,如果我们修改了clone到本地的代码,想push一下,显然第一种方式不可行,因为项目的远程信息是别人的(通过git remote -v 可以查看),而第二种方式,由于创建者相当于是我们自己,是能够push的(当然先要add 和commit)。但是我们push之后,原项目的主人是看不到我们修改的代码的,如果想让原作者接受并merge你的修改,这时可以发起pull request,这样原作者就能收到pull request请求,并可以审阅你的代码是否合理,如果他比较满意,就可以merge你的修改,这样原项目就得到了完善,而你也就成为了光荣的“贡献者”之一。

一般情况我们是不需要fork的。很多人错误的在使用fork,把它当成一种“收藏”功能,这其实并没有什么必要。一来,可以直接用“watching”来关注该项目,当有新的issue,commit,pull request时,你会收到相应的邮件提醒(前提是设置了邮箱)。二来fork的项目只是保留了fork当时的状态,如果项目作者在你fork之后更新了项目,你是看不到的。这就带来一个问题:如何实现fork后的项目与原项目的同步?这是我今天参与一个项目的时候才意识到的,以前没有思考过这个问题(诸位莫要见怪)。查阅了一些资料,找到了一个比较简单可行的答案。方法如下:

我的主页上有一个项目“zhihu-api”,可以看到,它是从“lzjub567/zhihu-api”fork来的。

我的 zhihu-api

1. 将自己主页的项目clone到本地,如下图:

clone 项目zhih-api

此时,若我们查看项目的远程信息,发现结果都是关于我自己主页的,origin是分支名称:

查看项目远程信息

2. 为项目添加远程分支:

添加远程分支

其中 upstream是远程分支名,后面的链接是原作者的仓库地址,此时再重新查看项目的远程信息,发现多了upstream的信息,是刚刚添加的原作者的仓库

查看remote 信息

3. 如果远程项目进行了更新,我们需要从upstream分支进行拉取,这样本地的代码就和原作者的代码同步了。

拉取远程项目信息

4. 将本地代码提交到自己主页的分支,即origin上了,这样,我自己主页的项目就和原作者的项目进行了同步。

push到自己的分支

总结一下:实现fork的项目和原项目同步的方法是利用本地的项目作为“中转”,为本地的项目添加两个远程信息,拉取原仓库的新代码,push到自己的仓库上,就达到了“同步”。

实现这个目的的做法不止这一种,只是我刚好看到了,觉得比较简单,就记录到这里备忘。

如果您喜欢我,可以通过微信请我喝果汁。

如果有疑问,可以留言或者发邮件给我 lhh_nj@163.com
原文地址:https://www.cnblogs.com/lihuanhuan/p/10612106.html