向开源社区贡献您的代码

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

就此打住……

本节将以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分支更新合并到你本地的当前所在分支。

命令成功显示如下:

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 多种多样的工作流使得在项目中实施Git时变得难以选择。这份教程提供了一个出发点,调查企业团队最常见的Git工作流。...
    JSErik阅读 4,360评论 2 8
  • 不知不觉,郡爷走了小半月。从郡爸的清理狗窝到郡爷奶奶有事没事到楼上来逛几圈,家里少了个吵吵闹闹的,不习惯也开...
    石筒子阅读 262评论 0 0
  • 对于微商的前景,成创老师我可以肯定的说,微商已经有很好的模式和很成功的案例,他们的模式比较良性,且增长速度与销售额...
    欣姐的微商干货铺阅读 432评论 0 1
  • 常常有管理学家会拿狼来做比喻,因为狼是自然界里最具谋略和协作性的动物。 严格意义来说,狼是没有天敌的捕杀者,它们勇...
    明月朗星阅读 1,301评论 1 4
  • 【2-4超级贝贝】2017.10.8数理践行day20 1.玩百数方格,摆1-50,占山为王。 2.看群里妈妈拿橡...
    huina_fb9e阅读 80评论 0 0