github上fork别人的代码之后,如何保持和原作者同步的更新
一、命令行的方式
首先要先确定一下是否建立了主repo的远程源:
# git remote -v
如果里面只能看到你自己的两个源(fetch 和 push),那就需要添加主repo的源
1、配置上游项目地址。即将你 fork 的项目的地址给配置到自己的项目上。比如我 fork 了一个项目,原项目是 wabish/fork-demo.git,我的项目就是 cobish/fork-demo.git。使用以下命令来配置。
# git remote add upstream https://github.com/wabish/fork-demo.git
然后可以查看一下配置状况,很好,上游项目的地址已经被加进来了。
# git remote -v
origin git@github.com:cobish/fork-demo.git (fetch)
origin git@github.com:cobish/fork-demo.git (push)
upstream https://github.com/wabish/fork-demo.git (fetch)
upstream https://github.com/wabish/fork-demo.git (push)
2、获取上游项目更新。使用 fetch 命令更新,fetch 后会被存储在一个本地分支 upstream/master 上。
# git fetch upstream
3、合并到本地分支。切换到 master 分支,合并 upstream/master 分支。
# git merge upstream/master
4、提交推送。根据自己情况提交推送自己项目的代码。
# git push origin master
由于项目已经配置了上游项目的地址,所以如果 fork 的项目再次更新,重复步骤 2、3、4即可。
二、只用Github不用命令行的方法
玩过github的人一定会在你自己的账号上fork了一些github开源项目。这些开源项目往往更新比较活跃,你今天fork用到你自己的项目中去了,过几个星期这个fork的origin可能有一些bugfix了,你怎么办呢?当然直接到Origin repo中去clone是一个方法,但是github的public repo有可能过一段时间就被作者删除了,你是否希望在origin即使已经被删除的情况下,你的账号下依然有你钟情的repo?
解决上面的问题,最好的方法就是不定时地将origin的commit sync到你自己的fork repo中,一方面能够保持鲜活,另一方面有备无患。那么如何sync呢?又有几种方案,一种是你直接在本地clone的repo中,pull upstrame,做好merge,随后push到你自己的fork repo中。另外还有一种更加简便聪明的方法:只需在github网站上点几个鼠标,不用本地开发环境轻松搞定:
1.打开你的github fork repo;
2.点击Pull request;
3.点击new pull request.默认情况下,github会比较original/your fork,这时应该不会有任何输出,因为你并没有做过任何变更;
4.点击switching the base.这时github将反过来比较yourfork/original,这时你将看到original相对你fork时的所有commit;
5.点击create a pull request for this comparison,这时将会反过来向你的repo提交一个pull request;
6.这时你作为你自己fork的repo的owner,你就可以点击confirm the merge,大笔一挥,所有的改动都被你一网打尽了@!
enjoy it!
图解
1.进入你的GitHub发起Pull request
2.选择compare across forks
3.反向操作。base fork改为自己的,head fork改为原作者的
4.点击 create pull request
5 添加comment
6.点击create pull request
7.点击Merge pull request
- Confirm merge