如何参与开源项目

简介: 本文根据作者参与开源项目的经验,介绍了如何参与到开源项目中贡献自己的力量。

前言

这篇文章的起因是朋友的一个疑问:如何参与开源项目?搜索了一下网上类似的文章,大多都是讲解如何操作 GitHub 来给开源项目贡献代码、开源协议有哪些以及开源项目的一些介绍。而开源项目作为开源思想的产物,最难的从来都不是贡献代码,而参与的方式也不只有贡献代码一种(虽然贡献代码是最直接的)。下面就根据我的经验,介绍一下如何参与到开源项目中。

心理建设

在和不同的小伙伴聊过之后,发现大家都有一个同样的问题:很多同学都觉得参与开源项目是技术大牛的事情,我们这种技术水平一般的,只需学习怎么使用就行了。

那么这就引出了小标题心理建设的重要性,一个开放的项目(伪开源不算),是可以接纳任何可行有益的建议的,只要是对项目有利的贡献,都会得到认可(前提是你能说服别人)。会有一些技术大牛维护这些项目,但不代表任何参与该项目人都是技术大牛,就如之前 4 岁小女孩可以给 Linux 内核贡献提交,只要你的提交可以提升项目质量,哪怕是一个符号的修改都会得到肯定。社区是开放的,任何人都可以参与进来;社区又是严谨的,只要有错误,任何人都可以修改它,并不是“大神”们的专利。

如何开始

开始前,首先要明确你想要做的内容,除了贡献代码以外,bug 的发现、新功能的建议、文档的补充、测试用例的完善,甚至是错别字的纠正,这些都是参与开源项目的方式。正如上文所说,一个开放的社区,是不会拒绝任何可以提升项目质量的行为的。

而代码贡献方面,如果有志于贡献高质量的代码、修复 bug 或贡献新功能,在开始时,可以打开 ISSUE,里面有一些打着 good first issue Label 的 ISSUE,这些 ISSUE 通常会使一些小功能的开发或者 bug 的修复,你可以通过完成这个 ISSUE 来踏出你贡献代码的第一步。当然,在该 ISSUE 中的交流时必不可少的,这样可以帮助你更详细的了解该 ISSUE 要解决的问题,从而在开发中少走弯路。

image

贡献规范

每个开源项目都会有自己的贡献指南(Contributing Guidelines),在参与项目之前,请先阅读该指南,一般该指南中都会有诸如 Slack channel 或邮件列表这样的沟通工具的链接,或者钉钉、微信这样即时交流工具的二维码(当然最简单的是在 ISSUE 中交流,并且这也是最直接也最容易得到回复的沟通方式)。

一般来说,不要在 fork 代码的 master 分支上做任何修改,该分支用来和上游代码库保持同步! 一个开发分支对应一个功能点,并且对应一个 PR,一个 PR 对应一个 ISSUE,最好不要将多个功能写在一个 PR 里,这样会增加项目维护者 review 的难度。

GitHub 操作

下面就是一些在 Github 上的操作规范。

fork 项目

要参与项目贡献,首先需要 fork 项目代码,在项目页面点击 fork 按钮,将其 fork 到自己的仓库中:

image

本地配置

在项目 fork 好之后,将其拉取到本地:

$ git clone https://github.com/sunny0826/kubernetes.git

为了保持与上游仓库代码一致,添加上游仓库:

$ git remote add upstream https://github.com/kubernetes/kubernetes.git

上游仓库添加好之后,之后都可以通过以下命令来使本地仓库与上游仓库保持同步:

# 切换分支
$ git checkout master
# 更新上游代码
$ git fetch upstream
# 合并代码到 master 分支
$ git merge upstream/master
# 上传代码
$ git push

新建开发分支

在同步上游仓库之后,就可以新建分支,添加自己的修改了:

$ git checkout -b xxx

提交 PR

在开发完成后,就可以 push 代码,然后提交 PR 了。一般需要在提交 PR 时,将关联的 ISSUE 标出,并说明该 PR 解决了什么问题。

而一些大的开源组织会有一些其他要求,比如 CNCF 的项目,在提交 PR 后 k8s-ci-robot 会检测你是否签署了 Linux 基金会的贡献许可协议(如果没有,就会要求你先签署一下该协议),同时还会做一些其他操作,比如根据内容打一些标签、做一些简单的测试,确保代码无冲突,并给你分配 reviewer(当然也可以使用 /assign 命令自己指定)。

Review

在提交 PR 后,就会有人来对你提交的代码进行 review。当然,这个人并不会立即出现,因为大部分开源项目的维护者都不是全职的,并且如果该项目的维护者在国外,还需要考虑时差问题。

reviewer 会对你提交的内容进行一些评论,可能是需要更改的点,或者是需要增加一些相关的单元测试,这个过程将一直持续,直到这些内容达到合并的标准,当看到 /lgtm 时,恭喜你,你的代码通过 review 被合并了。

删除开发分支

PR 被成功合并后,就可以对之前开发的分支进行清理了,因为在 review 中,会提交多个 commit,而合并一般会将这些 commit 压缩为一个 commit 然后合并到 master 分支,这就导致了 commit 信息的不一致,这也是为什么在前文要求不要使用 master 分支的原因,如果使用 master 分支,在提交几次 PR 后,就会多出很多很多的 commit...

image

清理本地分支:

$ git branch -d xxx

这种方式就是通过分支管理,让 master 分支始终与上游仓库的 commit 信息一致,而从 master 分支 checkout 出开发分支,在开发分支内容合并入上游之后,只需同步 master 分支内容,然后重复上面的步骤就可以开始新的开发了。

总结

以上就是这些年我参与开源项目的一些经验,是对网上一些文章的补充,其实不同开源组织的贡献方式不尽相同,在参与之前一定要先阅读贡献指南(Contributing Guidelines),这样会少走很多弯路。还有就是在 ISSUE 中的交流请尽量使用英语,哪怕你知道和你交流的是一名可以读懂汉语的人,这样做的原因是为了让其他不懂汉语的社区成员可以读懂你们交流,从而参与进来,而不是让人以为你们在“密谋”着什么。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
数据采集 Python
使用Python采集京东商品评论并保存至本地
使用Python采集京东商品评论并保存至本地
|
8月前
|
人工智能 自然语言处理 安全
2026年企业如何选择合适的智能客服系统,从“用了AI”到“看见效果”
2026年,企业智能客服已从“是否用AI”转向“能否创造业务价值”。瓴羊Quick Service依托大模型语义理解、多轮对话、跨渠道协同与自学习能力,支持场景化配置、深度系统集成及效果量化分析,助力企业降本增效、提升体验、驱动转化,实现从技术落地到价值可见的跃迁。(239字)
|
6月前
|
人工智能 自动驾驶 安全
阿里ATH与英伟达GTC的协同共振,解码AI产业变革逻辑
2026年3月16日,阿里成立ATH事业群,以Token为锚点重构AI组织;英伟达GTC大会提出“AI工厂”与智能体经济。二者同日发力,标志AI产业正式迈入“组织+技术”双轮驱动的工业化新纪元。(239字)
572 0
|
人工智能 自然语言处理 搜索推荐
企业客户服务效率低、体验差,如何通过大模型技术改善?一文了解面向客户服务全场景的行业大模型的3大应用方向
本文三桥君探讨了大模型技术在客户服务领域的应用与实践。从架构设计出发,详细解析了面向客户、客服和运营三大场景的智能功能模块,包括业务咨询、情感关怀、智能点选、知识采编等12项核心功能。AI产品专家三桥君指出,通过行业大模型定制、多源数据整合等技术手段,企业可实现客户服务的智能化升级,显著提升客户体验和运营效率。
637 0
|
数据采集 API 开发工具
从 0 到 1 掌握鸿蒙 AudioRenderer 音频渲染:我的自学笔记与踩坑实录(API 14)
本文详细介绍了在 HarmonyOS 中使用 AudioRenderer 开发音频播放功能的完整流程。从环境准备(SDK 5.0.3、DevEco Studio 5.0.7)到核心概念(状态机模型、异步回调),再到开发步骤(实例创建、数据回调、状态控制),结合代码示例与常见问题解决方法,帮助开发者掌握 AudioRenderer 的底层控制与定制化能力。同时,文章还提供了性能优化建议(多线程处理、缓冲管理)及学习路径,附带官方文档和示例代码资源,助你快速上手并避开常见坑点。
691 7
|
9月前
|
XML 存储 Rust
Rust语言高效数据序列化(协议缓冲区protobuf完整入门教程)
本教程带你使用Rust语言集成协议缓冲区(Protobuf),实现高效、跨平台的数据序列化。从环境搭建到代码生成,手把手教你完成Rust与Protobuf的整合,适用于微服务、网络通信等高性能场景。
|
JavaScript 前端开发 开发工具
如何参与开源项目以及贡献代码的流程和注意事项(2024年11月保姆级教程)
本文详细介绍了如何参与开源项目及贡献代码的流程和注意事项,包括选择项目、fork仓库、克隆到本地、阅读贡献指南、提交代码、创建Pull Request等步骤,并强调了沟通礼仪、代码质量的重要性,适合初学者参考学习。
1636 1
如何参与开源项目以及贡献代码的流程和注意事项(2024年11月保姆级教程)
|
负载均衡 Java Nacos
常见的Ribbon/Spring LoadBalancer的负载均衡策略
自SpringCloud 2020版起,Ribbon被弃用,转而使用Spring Cloud LoadBalancer。Ribbon支持轮询、随机、加权响应时间和重试等负载均衡策略;而Spring Cloud LoadBalancer则提供轮询、随机及Nacos负载均衡策略,基于Reactor实现,更高效灵活。
1164 0
|
JSON 缓存 小程序
微信小程序组件封装与复用:提升开发效率
本文深入探讨了微信小程序的组件封装与复用,涵盖组件的意义、创建步骤、属性与事件处理,并通过自定义弹窗组件的案例详细说明。组件封装能提高代码复用性、开发效率和可维护性,确保UI一致性。掌握这些技能有助于构建更高质量的小程序。
|
运维 Kubernetes 供应链
云原生时代的运维体系进化
基于容器、Kubernetes 等云原生技术,提供的开放社区标准、不可变基础设施、声明式 API 会成为企业 CloudOps 的最佳实践,也将在这个基础上推进数据化、智能化体系建设,将运维复杂性进一步下沉,让企业可以聚焦于自己的业务创新。阿里云也将持续向外输出自身在超大规模云原生实践和探索中的能力沉淀,与更多企业、开发者一起,躬身入局,全面拥抱云原生运维技术体系。
5387 121
云原生时代的运维体系进化

热门文章

最新文章