这里我不想展开关于开源的话题,但是我还是鼓励大家在使用开源技术的同时,也能够为开源社区贡献自己的一份力量,不得不承认,国内的开源文化还处于社会主义初级阶段,只有全中国的程序员都行动起来,才能真正的打造具有中国特色的社会主义“开源文化”。
就此打住……
本节将以https://github.com/ChangjunZhao/coderbook项目为例,使用另一个账号clone这一个项目,然后创建一个新的分支,作一些更改,同时源项目coderbook也同期发生一些变更,最后演示如何保持你clone的项目和源项目保持同步,使用pull request功能将您的更改推送给我,进行代码review, 然后采纳你的pull request,合并进行我的项目里。
将fork过来的项目clone到本地
本节将使用ideasandroid账号,您可以使用你自己的账号和我一起操作,看10遍书还不如动新亲自做一遍。
执行下面的命令将fork到ideasandroid账号下的coderbook项目克隆到本地:
$ git clone git@github.com: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分支更新合并到你本地的当前所在分支。
命令成功显示如下:
这样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项目后,如下图所示:
这里可以看到我们刚刚提交的bug-001分支,同时多了一个"Compare & pull request"的按钮。
“pull requests”是把你提交到github repository的更改告诉所有和你fock项目相关的人。当一个pull request发送后,相关的所有人可以审查这些变更、讨论潜在的修改,如有必要,还可以发布新的代码。
点击"Compare & pull request",如下图所示:
从图中可以看到,你可以填写一些说明信息,最下面还列出了两个版本的区别。
点击“Create pull request”, 一个pull request就发送出去了,这时ChangjunZhao的coderbook项目就能收到这个pull request。
合并(merge)开发者pull request
当ChangjunZhao登录github,他就能看到一个pull request,如下图所示:
点击“Pull Requests”进入就能看到ideasandroid发送的pull request。
点击pull request后进入如下页面:
在这里,你可以和其它人交流这个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)列表中。
至此,你就可以给自己的简历打上一个标签:积极参与开源项目,并成为某某项目的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