-- 作者 谢恩铭 转载请注明出处

之前写了文章 Android开源项目学习 | QKSMS短信App 和 Git,Github和Gitlab简介和基本使用, 今天偶然发现了一个QKSMS的问题(Bug)​。

我解决了问题, 并在QKSMS的Github页面上提交了补丁。

正好借此来聊聊如何在Github上为开源项目做贡献, 让你的Github成为你的补充简历, 从此升职加薪, 当上总经理, 出任CEO, 迎娶白富美, 走向人生巅峰, 指(zi)日可待啊~

好了, 开个玩笑。还是踏踏实实做人, 好好学习, 天天向上吧!

前提

首先, 你要会用Git和Github。还不了解的, 去看我上面那篇关于Git和Github的文章。

Github的页面语言是英语, 所以需要英语水平还可以, 不然看不懂, 写不了。

如果你英语还不好, 或者正在入门, 请看: 对于程序员, 为什么英语比数学更重要? 如何学习

实作

首先, 一个Github上的开源项目, 是有作者的, 有的是个人(例如QKSMS), 有的是团队(例如Google的Sample的Github页面: https://github.com/googlesamples) 。

QKSMS的作者是Moez Bhatti, 他活跃度很高:

QKSMS的页面是:
https://github.com/moezbhatti/qksms

创建错误报告

发现一个Github的开源项目的问题(issue)之后, 我们可以在项目页面点击Issues那个标签栏, 去到Issues页面:

点击New Issue(新问题)的绿色按钮来创建一个新的issue:

编辑你的issue, 点击Submit new issue(提交新问题)来提交你的issue。

我创建的issue:
https://github.com/moezbhatti/qksms/issues/585

如下:

可以看到, issue的文本里, 有几个区块, 以后如果用Redmine, Bugzilla这类的Bug合作平台, 也可以遵照下面的格式来描述一个bug:

  1. DESCRIPTION : 描述。issue的简单描述。我写的是"当在设置的Activity中旋转屏幕, 之后再按回退键, QKSMS奔溃。这个问题同时存在于Google Play上下载的版本和从Github上下载编译的版本。这个问题只发生在进入设置的子类型设置(例如: 外观, 通用, 通知, MMS, QK Reply, 等等)中时"。
  2. STEPS : 重现issue的步骤。依顺序写下如何重现问题的步骤。
  3. EXPECTED : 期待的表现。也就是你期待的正确表现是什么。
  4. OBSERVATIONS : 实际的表现。也就是你观察到的错误表现。

我还附上了Android Studio中复制过来的Logcat的奔溃报告。在Logcat from Android Studio那个区块。

提交补丁

你在代码中做了修改, 测试你的修改没问题了之后, 就可以向Github提交你的补丁啦~

在Git中如何制作补丁呢?

非常简单。用

git format-patch

命令即可。

首先你在Git中提交你的修改

git add QKSMS/src/main/java/com/moez/QKSMS/ui/settings/SettingsActivity.java
git commit -m "Fix crash when backPress from SettingsActivity after Orientation changed"

然后, 用git log来查看你刚提交的commit和之前的一个commit:

git log

可以看到, 我们刚才提交的commit, 其hash值是c0c949a4a0812e27f1102e566e8c11fe82b29dc5, 而前一个commit的hash值是d50befdf6377ff42d2307ddd59628f0490c3eb86

根据

man git-format-patch

显示的文档所说, git format-patch 后接你的改动从哪里开始的那个commit的hash值, 因为我们的改动是基于前一个commit(hash值为d50befdf6377ff42d2307ddd59628f0490c3eb86), 因此, 要生成patch补丁, 只需:

git format-patch d50befdf6377ff42d2307ddd59628f0490c3eb86

可以看到, 它为我们生成了补丁文件:

0001-Fix-crash-when-backPress-from-SettingsActivity-after.patch

就在当前目录里:

补丁的改动如下:

可以用

git show

来查看

补丁在这里

直接在错误报告里提交补丁

如果你对代码的改动很少, 那么可以考虑制作patch(补丁)文件, 然后直接用评论附件形式上传到你刚才创建的错误报告中:

在下面所示的方框中(Leave a comment)编辑你的comment(评论), 你随时可以预览你的评论, 点击Preview(预览)即可, 要回到编辑模式, 点击Write(写)。

然后看到有一段文字: Attach files by dragging & dropping or select them.

意思是: 你可以拖动文件到这个编辑框来附上你的文件, 或者也可以点击"select them"来手动选择文件。

不管你用哪种方式, 把文件附上之后(我这里的补丁文件名是0001-Fix-crash-when-backPress-from-SettingsActivity-after.patch.txt ), 点击绿色的Comment按钮, 评论就被提交了, 文件如下图中红框所示。

我在评论里说: "我创建了一个补丁, 修正了这个问题, 而且也同时修正了一个小问题, 就是在设置页面的子类型页面中, 如果旋转屏幕, 会自动回到设置页面的主页面。不过您也许会想到更好的解决方案。"

PS: 因为Github不能提交patch结尾的文件, 所以我把补丁文件改成了以.txt结尾, 但并不妨碍打补丁。

在Git中如何打补丁呢?

非常简单:

  1. cd到项目根目录下
  2. 用git apply命令, 后接补丁文件的路径
  3. git add 修改的文件
  4. git commit
  5. git push

实际操作:

cd ~/qksms
git apply ~/Desktop/0001-Fix-crash-when-backPress-from-SettingsActivity-after.patch.txt
git add QKSMS/src/main/java/com/moez/QKSMS/ui/settings/SettingsActivity.java
git commit -m "随便你写什么"
git push origin master   # 或者提交到其他分支

创建新的分支来提交补丁

如果你的改动比较多, 你就不能在错误报告的评论里附上一个小小补丁文件就了事了, 最好用创建分支的方式来提交你的pull request(提交请求)。

如果你是Github的开源项目的作者本人或者是被作者指定的贡献者, 你可以直接git push你的branch到项目代码仓库, 然后可以直接创建pull request。

点击Pull requests标签, 进入Pull requests页面:

点击上图中 New pull request

然后选择你提交的分支和你要合并的目标分支。

但是, 一般我们都是游客, 没有权限git push到开源项目的代码仓库。

所以需要用另一种方式来提交补丁, 可以称之为 pull request by comparing across forks (通过对比交叉复刻来提交请求)。

首先, 我们需要fork(复刻)这个开源项目, 点击下图中的fork按钮:

稍等片刻, 开源项目就被复刻到你的个人Github目录了, 如下:

可以看到, 现在我自己的Github仓库已经有了这个开源项目的代码, 不过标明了 "forked from moezbhatti/qksms", 就是说这个仓库不是我自己的, 是从moezbhatti/qksms项目复刻过来的。

接着, 你用git clone来把复刻的项目拉取到本地:

首先, 点击上图中 Clone or download按钮, 复制那个链接: https://github.com/frogoscar/qksms.git

然后在终端里输入:

mkdir github
cd github
git clone https://github.com/frogoscar/qksms.git
cd qksms

你可以先git checkout -b来基于master分支创建一个你自己的分支(名字随便取), 直接改动代码, 然后修改代码, 假如你的补丁, 再git add, git commit, git push。

git checkout -b enmingxie/Fix_crash_when_backPress_from_SettingsActivity_after_Orientation_changed

因为我之前已经从其他地方创建了补丁, 因此, 我就不手动改代码了, 直接用git apply来打补丁。

git apply ~/Desktop/0001-Fix-crash-when-backPress-from-SettingsActivity-after.patch

通过git status命令(上图中看到的git st是我自己配置的alias), 我们可以看到QKSMS/src/main/java/com/moez/QKSMS/ui/settings/SettingsActivity.java文件被改变了,还没有git add, 因此:

git add QKSMS/src/main/java/com/moez/QKSMS/ui/settings/SettingsActivity.java
git commit -m "Fix crash when backPress from SettingsActivity after Orientation changed"
git push origin enmingxie/Fix_crash_when_backPress_from_SettingsActivity_after_Orientation_changed

输入你的github用户名和密码(如果你配置了SSH, 则不必输入)。

再到Github的项目页面, 点击F5刷新, 可以看到刚push的enmingxie/Fix_crash_when_backPress_from_SettingsActivity_after_Orientation_changed这个branch(分支)已经有了。

此时, 再去开源项目页面, 首先:

  • base fork那里, moezbhatti/qksms是QKSMS的代码仓库。
  • base那里, master表示是QKSMS的master分支(主分支)。

选择对应分支:

  • head fork那里, frogoscar/qksms是我的Github上的复刻的QKSMS的代码仓库。
  • compare那里, enmingxie/Fix_crash_when_backPress_from_SettingsActivity_after_Orientation_changed是我刚push的分支。

可以看到我的分支与开源项目(QKSMS)主分支(master)的(diff)改动了:

然后点击 Create pull request (生成提交请求), 编辑提交请求的文本, 再点击Submit pull request, 就完工啦!

这样, 作者审核你的分支之后, 就可以决定是否使用你的补丁啦!

恭喜你! 第一个递交的Github补丁! 加油~

Github | 如何贡献Android开源项目和提交补丁相关推荐

  1. GitHub优秀的Android开源项目

    原文地址为http://www.trinea.cn/android/android-open-source-projects-view/,作者Trinea 主要介绍那些不错个性化的View,包括Lis ...

  2. GitHub 优秀的 Android 开源项目 淘宝技术牛p博客整理开发中最常用的GitHub上 优秀的 Android 开源项目整理(精品)...

    原文地址为http://www.trinea.cn/android/android-open-source-projects-view/,作者Trinea 主要介绍那些不错个性化的View,包括Lis ...

  3. GitHub 优秀的 Android 开源项目 转自http://blog.csdn.net/shulianghan/article/details/18046021

    原文地址为http://www.trinea.cn/android/android-open-source-projects-view/,作者Trinea 主要介绍那些不错个性化的View,包括Lis ...

  4. GitHub 优秀的 Android 开源项目(值得研究)

    转自:http://blog.csdn.net/shulianghan/article/details/18046021 主要介绍那些不错个性化的View,包括ListView.ActionBar.M ...

  5. 【转】GitHub 优秀的 Android 开源项目

    转自:http://blog.csdn.net/shulianghan/article/details/18046021 主要介绍那些不错个性化的View,包括ListView.ActionBar.M ...

  6. GitHub 优秀的 Android 开源项目——转自多篇网络文章

    GitHub 优秀的 Android 开源项目 转自:http://blog.csdn.net/shulianghan/article/details/18046021 主要介绍那些不错个性化的Vie ...

  7. GitHub 优秀的 Android 开源项目 - 让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) - 博客频道 - CSDN.NET

    原文地址为http://www.trinea.cn/android/android-open-source-projects-view/,作者Trinea http://www.cnblogs.com ...

  8. 回顾 | 在 GitHub 上贡献到开源项目

    点击蓝字 关注我们 精彩回顾 GitHub 是世界上最大的开源社区,拥有数百万个开源项目.GitHub 的优势之一是在项目上进行协作非常容易.在本研讨会中,我们将介绍在 GitHub 上找到开源项目并 ...

  9. 2016年GitHub上史上最全的Android开源项目分类汇总

    以下内容为转载 版主原网址 http://itindex.net/detail/51896-github-android-开源 GitHub上史上最全的Android开源项目分类汇总 今天在看博客的时 ...

最新文章

  1. fork()会拷贝子线程吗?
  2. python中实现多线程的几种方式
  3. 入职必备两小时入门SVN(二)
  4. 友益文书类似软件_网易有道词典笔,让你的英文书也有实时翻译功能
  5. json、js数组真心不是想得那么简单
  6. 算法之【大整数乘法】
  7. Spring 核心控制器DispatcherServlet(二)
  8. 亚马逊表示并未放弃WP平台:正在打造新应用
  9. matlab模糊数学隶属问题,模糊数学模型matlab
  10. 汉字编码计算机,计算机汉字编码,computerbased Chinese codings,音标,读音,翻译,英文例句,英语词典...
  11. 京东面试Java后台--2018年9月16号(星期日)
  12. mac下玩英雄联盟LoL国服的新办法
  13. JavaScript:100以内质数1000以内的质数显示和统计
  14. 重拾Java基础知识:IO流
  15. laydate点击输入框闪一下不见了_ps文字工具打字不显示,应该如何解决?
  16. [机器学习] 深入理解 目标函数,损失函数和代价函数
  17. 15岁极客王逸翛:希望大家都有“开源精神”
  18. 一款用autoit3写的小游戏,大家娱乐下
  19. Beta冲刺-第四天
  20. 520男生送什么礼物特别、2022特别礼物合集

热门文章

  1. 微信小程序开放插件功能,无需重复开发!
  2. 浅析组织结构与个人发展的关系
  3. Python自动化运维模块 Pyautogui / Pyautoit / pywinauto
  4. NFC(Near Field Communication)
  5. 阿里开源java调试_阿里开源java诊断工具Arthas
  6. 月薪 2~3W 的码农,是怎样度过一天的?
  7. 两化融合贯标认定条件
  8. docker安装portainer中文版
  9. 不带刀尖跟随的后处理
  10. C语言:scanf()语句错误读取