名垂千古的机会到了,一文说清【给开源大项目贡献代码】二三事(github,pr,fork,ci)

2020年3月14日 1 375 views 1570字阅读5分14秒

和我比较熟的朋友知道我前几天给prometheus贡献了代码,这是我第一次给一个比较大的开源项目贡献代码,后来一了解发现,我滴妈,好多人都不会发起PR请求来合并代码,这次我就好好写写,给大家一个参考。

毕竟没有什么比给开源项目贡献过代码更好的经历了,简历上写上去肯定会获得更多的眼球和更多的关注,一起来吧!

其中有三个新 名词 fork pr ci ,不要急,带着问题,我们慢慢来。

fork

第一步,找到你到贡献代码的项目,用Fork按钮,然后项目就会自动拷贝一份到你自己的github仓库。

跑到你的github仓库里可以看到刚刚frok的项目。

准备发起PR

把你的项目clone下来,然后修改代码,再提交(如果有单元测试要完善,不然老外不会让你过的,一些大的开源项目都有单元测试,这是为了保证每个提交都是正常的,无论哪个分支一拉下来都不会报错,不仅节省人力,也体现了专业度)。

commit 结束后推送到远端(如果这些都不会的话,只能下来好好补习下git了)

进入到你的项目里,找到Pull requests(就是我说的pr),新建pr

选择从哪个项目合并到哪个项目,注意箭头的指向

下面的pr描述要改一下,这是老外最直接看到的东西(没想到我菜J的英语老外也能看得懂)

注意要勾选Allow edits from maintainers 允许老外改动你的描述,如果你对你的英语语法和描述有足够的自信,可以不用勾选,但那样项目创建人有一定概率小肚鸡肠不让过。

自动跑ci 并 修改ci报错

点完上图右下角的Create pull request,有跑单元测试的脚本就自动开始运行了,他会监测你的每个步骤以及代码逻辑有没有问题,甚至完把这个提交的代码打包到不同的平台去跑测试,这就是 ci,中文是持续集成,现在稍微大点的团队要节省人力都得了解这个。

如上图,我有两个点没有过,我们一个一个来,第一个DCO意思是我没有签名信息完善到commit信息里(不止是装X,也是为了背锅哈哈哈)

回到你的项目里,刚刚 push的分支上,执行下面的命令。

git commit --amend --signoff

ok,自动创建了签名信息(注意必须和你的github账号邮箱一致,如果你用的密钥验证的方式 ,可能邮箱是错的,要手动改一下)

然后强制推送到远程,这里相当重要,你千万不要创建新的commit,只针对最后一次提交做事情就好

git push --force-with-lease origin master

对于第二个ci问题,查看详情发现是代码风格不规范

IDE自带的format快捷键修复下就好了。按照下面的命令再强制推送一次。

好了,慢慢等了。

等到全部绿色就是所有的测试用例都跑过了

咦!老外给我回复了。

和老外讨论

和他解释了一堆,最后因为老外觉得我要动到用户的配置,而且改动得到的功能点收益不是很大,所以没通过

一旦老外通过了就会合并你的代码啦

不服了,我改了下代码,去掉了比较大的改动,再来一次

根据老外的要求完善了文档(完善好再commit --amend,再强制push

合并进去啦!开心!!

虽然不是什么大的功能改动,但是这种名垂千古的感觉还是很棒的,这篇文章讲了项目协作发起pr的整个过程,对远程开发的团队很有用,希望每一个看到这篇文章的人有所收获。

我是你们的朋友机智的小熊,我们下次再见。

常用命令

# 数字签名,独一无二的签名,无法伪造你的提交
git commit --amend --signoff
# 安全的强制推送,防止覆盖别人的提交
git push --force-with-lease origin master
# 强制推送到远程指定分支,跨分支推送
git push github HEAD:master --force
# 提交时设置作者和邮箱
git commit --amend --author="minibear2333 <pzqu@qq.com>"