向开源社区贡献您的代码

这里我不想展开关于开源的话题,但是我还是鼓励大家在使用开源技术的同时,也能够为开源社区贡献自己的一份力量,不得不承认,国内的开源文化还处于社会主义初级阶段,只有全中国的程序员都行动起来,才能真正的打造具有中国特色的社会主义“开源文化”。

就此打住……

本节将以https://github.com/ChangjunZhao/coderbook项目为例,使用另一个账号clone这一个项目,然后创建一个新的分支,作一些更改,同时源项目coderbook也同期发生一些变更,最后演示如何保持你clone的项目和源项目保持同步,使用pull request功能将您的更改推送给我,进行代码review, 然后采纳你的pull request,合并进行我的项目里。

将fork过来的项目clone到本地

本节将使用ideasandroid账号,您可以使用你自己的账号和我一起操作,看10遍书还不如动新亲自做一遍。

执行下面的命令将fork到ideasandroid账号下的coderbook项目克隆到本地:

$ git clone [email protected]:ideasandroid/coderbook.git
$ cd coderbook

增加远程git仓库

执行下面的命令将ChangjunZhao的源项目添加到远程仓库,以便跟踪源项目:

$ git remote add upstream https://github.com/ChangjunZhao/coderbook.git
$ git fetch upstream

保持fork项目与源项目同步

在此期间,ChangjunZhao在coderbook项目中增加了一个java类test.java,此时ideasandroid需要做的操作如下:

$ git fetch upstream
$ git merge upstream/master

这个操作将会把ChangjunZhao最新的master分支更新合并到你本地的当前所在分支。

命令成功显示如下:

gitmergeremote.png

这样ideasandroid本地的master分支就保持与ChangjunZhao的一致了。

特别提示:对于基于别的项目fork过来的项目,建议不要在master分支更改任何代码,确保fork过来的项目master分支和源项目的master分支始终保持一致。

修改bug

上一步中ideasandroid用户把ChangjunZhao最新的代码merge到本地master分支后,ideasandroid用户发现ChangjunZhao犯了一个低级错误,在test.java文件中把Hello world写成了Hello word!

class test{
   public static void main(String[] args){
     System.out.println("hello, word");
   }
}

如何进行修改呢?

首先ideasandroid用户执行如下命令在本地创建一个新的分支bug-001:

git checkout -b bug-001

在bug-001分支上,ideasandroid用户把test.java改为:

class test{
   public static void main(String[] args){
     System.out.println("hello, world");
   }
}

执行如下命令将代码推送到ideasandroid的github repository上。

$ git add .
$ git commit -m 'change word to world'
$ git push origin bug-001

这样的完成了bug的修改,但是我能不能执行下命的命令告诉ChangjunZhao这个bug,并修复这个bug呢?

$ git checkout master
$ git merge bug-001
$ git push upstream master

如果你对于ChangjunZhao/coderbook这个项目您有commit提交权限,那么当然可以。

但是你没有…… 哈哈。

使用pull request

在完成前面的操作后,使用ideasandroid账号登录github,进入ideasandroid/coderbook项目后,如下图所示:

newbranch_pullrequest.png

这里可以看到我们刚刚提交的bug-001分支,同时多了一个"Compare & pull request"的按钮。

“pull requests”是把你提交到github repository的更改告诉所有和你fock项目相关的人。当一个pull request发送后,相关的所有人可以审查这些变更、讨论潜在的修改,如有必要,还可以发布新的代码。

点击"Compare & pull request",如下图所示:

githubpullrequest.png

从图中可以看到,你可以填写一些说明信息,最下面还列出了两个版本的区别。

点击“Create pull request”, 一个pull request就发送出去了,这时ChangjunZhao的coderbook项目就能收到这个pull request。

合并(merge)开发者pull request

当ChangjunZhao登录github,他就能看到一个pull request,如下图所示:

recived_pullrequest.png

点击“Pull Requests”进入就能看到ideasandroid发送的pull request。

pullrequestpage.png

点击pull request后进入如下页面:

pullrequestdiscuss.png

在这里,你可以和其它人交流这个bug修改的必要性等等……

可以查看代码变更内容。

如果觉得这个bug可以合并,那就点击“Merge pull request”就可以把ideasandroid提交的代码合并到master分支。

或者执行如下命令完成合并:

git checkout -b ideasandroid-bug-001 master
git pull git://github.com/ideasandroid/coderbook.git bug-001

git checkout master
git merge --no-ff ideasandroid-bug-001
git push origin master

此时,ideasandroid的大名就会出现在ChangjunZhao/coderbook的贡献者(contributors)列表中。

githubcontributors.png

至此,你就可以给自己的简历打上一个标签:积极参与开源项目,并成为某某项目的contributor…… 哈哈!

对了,还有个东西忘了告诉你,此时ChangjunZhao的master分支已经合并了你的bug-001分支,bug-001分支对你来说已经没用了,执行下面的命令,更新master分支,并删除bug-001分支。

git fetch upstream
git checkout master
git merge upstream/master
git branch -d bug-001
git push origin --delete bug-001 #把远程分支也删除吧

怎么样? ideasandroid和ChangjunZhao合作很愉快吧?


国际范程序必读:
程序员的编辑器-VIM(爱就是爱)
在github上写博客
企业级应用开发和Maven之间的那些事
DevOps是什么东东?
js依赖管理工具bower
JS模块化编程-requirejs

你可能感兴趣的:(向开源社区贡献您的代码)