大家好,这里是程序员晚枫,全网同名。今天继续来讲开源的内容。
上次给大家分享了一个中阶的操作:从零打造你的专属Python第三方库
文章发布后,又有几位朋友联系我,加入了开源项目的开发.
因为很多人是第一次参与开源项目,所以今天来讲一个初阶的操作:零基础,如何参与开源项目?
主要内容包含:开源合作的步骤、需要的技术知识、如何开始第1个任务、如何运营项目。
一、整体流程
以1000+star的开源项目python-office为例,给它贡献代码,共有以下几步:
- 在开源平台有一个自己的账号,必须绑定自己的邮箱。
- 私信给我,你在平台的账号名和邮箱。我的微信:python-office
- 用git命令,下载代码到本地,这里存在2种情况:
- 如果你已经是项目的成员(一般加入我的项目,我都会给你权限):那么直接用git clone 命令下载即可。
- 如果你不是项目成员,请先催我完成上面的第2步。
- 以develop分支为基础,创建一个新分支,命名规则:feature/xxx,xxx为自定义的分支名,比如:feature/add-ocr-api
- 修改代码后,提交新分支及其代码到远程仓库
- 在网页上,创建一个pull request,将你刚才提交的分支feature/add_ocr_api合并到develop分支。
- 更新功能后,参与开源项目的运营。
下面逐一介绍一下每个步骤的注意点。
如果你不懂技术,也想参与开源项目,可以直接看本文第五部分:项目运营。
二、选择开源平台
国内常用的开源平台有GitHub,Gitee,GitCode,GitLab
。
目前我们用GitCode作为开发平台,代码提交后自动同步到GitHub和Gitee。
所以我们所有的项目,在3个平台都能找到,都有人提交issues或者pr,但是代码只提交/合并GitCode平台的。
用GitCode的原因我也解释一下,主要有2个:
- 首先是网络问题,这个不用多解释了。再加上我们项目的用户主要也是中文用户,所以选一个国内平台,减少很多沟通成本。
- 其次是想参与国内的开源浪潮。国内开源越来越受重视,我们作为开源项目也需要一个平台来托举我们,
三、有关开源的技术知识
以下几个知识,参与项目之前大家可以学习一下,其中标⭐的请务必看完再参与:
⭐我这些开源项目的设计思路:Python中国的演讲:《非程序员如何学习和使用 Python》
⭐git的知识:
- 分支怎么管理
- 怎么同步代码,怎么解决冲突
- 怎么提交pr
python的知识(不会可以找我要资料):
- 语法基础
- 面向对象
- 设计模式
推荐资料:流畅的Python(第2版)
一些良好的合作意识:例如提交代码后群里及时同步、改别人的代码之前先确认一下等
四、怎么开始第一个任务?
注册完账号,给我账号+邮箱的时候,可以顺便说一下你的技术背景/感兴趣的技术方向/项目 + 你想从参与开源中得到什么。
如果我觉得手里的项目能满足你的目标,我会根据你的技术背景,给你一些项目任务,从易到难的顺序,一方面让你逐渐熟悉项目,一方面也让我通过难度来了解你的技术水平。
- 任务会通过issue的方式提出,负责人会直接关联你的账号,所以你在后台就能看见。
- 提交pr的时候,记得选择:关联issue并且合并后自动关闭issue。
如果我觉得我无法满足你的目标,我也会直接告诉你,毕竟开源合作本来就是基于兴趣和信任,沟通起来会坦诚直接。
在开发过程中,总会遇到各种各样的问题,所以有不懂的及时提问,也是很重要的一点。
这里我也提前说一下关于分支的问题,如果看不懂,请把上文git的知识学完了再来看:
- 不要直接修改main/master分支,也不要直接改develop分支。
- 正确的做法是:项目clone到本地后,以develop分支为基础,创建一个新分支,命名规则:feature/xxx,xxx为自定义的有意义的分支名,比如:feature/add_ocr_api
- 建议每次开发之前,都执行一下git fetch命令,看develop分支的代码是否有更新,如有更新,合入自己的开发分支
- 提交pr后,及时删除当前分支,保持清晰的分支状态
五、关于运营
一个开源项目的成功,除了优秀的开发,也需要优秀的运营,比如:
- 用户管理:收集需求、确定开发方向、技术答疑
- 项目推广:酒香也怕巷子深,怎么让更多的人知道项目,用上项目
- 商业变现:怎么让项目能健康的活下去?如何分配利润给项目的参与者?
而这部分工作,是很多专注于技术的程序员是没有接触过的,如果你有兴趣,我也会慢慢带着你做。甚至如果你不会技术开发,但是想参与开源项目,只负责运营部分也是可以的。
目前我手里有30+开源项目,运营主要是我自己在做。
今年开始招募开源作者共同开发以后,也慢慢有一些朋友可以独立运营一个项目了,比如:@码匠er,@YaaaKaaang。
大家如果对开源感兴趣,欢迎加入交流群,一起开发学习。