Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >我提交的 PR 为何还没能合入?

我提交的 PR 为何还没能合入?

作者头像
赵化冰
发布于 2024-03-26 00:46:25
发布于 2024-03-26 00:46:25
14300
代码可运行
举报
运行总次数:0
代码可运行

我提交的 PR 为何还没能合入?如何才能更快地合入我的 PR ? 相信这是很多参与开源项目的开发者常常遇到的疑问。

对于开发者来说,提交 PR(Pull Reques)是参与开源项目的主要方式。不管是修复一个故障,添加一个新功能,还是改进文档,我们都需要通过提交 PR 的方式将其合入到项目的主分支中。那么,我们提交的 PR 如何才能尽快地被项目接受呢?

要让 PR 顺利地通过评审,我们需要学会正确地提交 PR 。一个好的 PR 可以帮助项目维护者在 Review 时快速理解该 PR 的意图,以及时对 PR 进行反馈,PR 中的修改也能尽快合入到项目的主分支中。

然而,对于不熟悉开源项目贡献流程的开发者来说,要提交一个好的 PR 并不是一件容易的事情。在这篇文章中,我将分享一些我在参与开源项目的过程中总结的经验,希望能够帮助到大家。

提交 PR 之前的准备工作

对于一个刚开始参与某个开源项目的开发者来说,如果在前期没有进行任何交流的情况下直接提交 PR,该 RP 一般会很难通过。一方面这是因为你在提交 PR 时并不了解项目的代码规范,以及相关代码项目模块的一些设计原则等,导致 PR 可能不符合项目的要求。另一方面,在缺少前期交流的情况下,项目的维护者对你 PR 提交的背景并不了解,导致难以对 PR 进行评审。在大部分情况下,项目维护者也许并不会直接拒绝你的 PR,但该 PR 可能会被挂起,长期缺少关注和反馈。

加入开源项目贡献之前,开发者应该先学习了解该项目的相关知识,包括项目的设计理念,功能特性,代码风格,编译流程等。这些信息一般可以在项目官方网站的文档和代码仓库的 README 文件中找到。了解项目的相关知识可以帮助我们更好地理解项目的代码,从而在提交 PR 时更容易符合项目的要求。

在正式提交 PR 前,建议先通过提交 Issue 的方式先对 PR 的背景进行说明。Issue 一般分为两种,一种是 bug(故障),即项目现有代码中发现的错误,另一种是 feature (功能特性),即我们希望项目增加的新功能。对于 bug,我们需要说明 bug 的现象,复现步骤,以及期望的正确行为。对于 feature,我们需要说明 feature 的目的,设计思路,以及可能的实现方式。通过提交 Issue 的方式,可以让项目维护者提前了解你的 PR 提交的背景。我们可以在 Issue 中对各种方案进行讨论,得到项目维护者的反馈,在社区中就方案达成初步一致后再提交 PR。这样经过充分讨论后提交的 PR 会更容易被项目维护者接受。

清晰的 RP 描述

在提交 PR 时,我们需要为 PR 添加一个清晰的描述。PR 的描述非常重要,这是项目维护者在处理 PR 时最先查看的内容。一个好的描述可以让评审者快速了解该 PR 的背景,帮助其理解 PR 中改动的代码,从而让提交者尽快从评审者处得到进反馈,加快 PR 合入项目代码的时间。而一个不好的描述可能会增加评审者理解 PR 的时间,甚至会使得 PR 较长时间无法得到关注。

对于一个开源项目来说,可能有多达几十个,甚至上百个 PR 在等待评审,而评审者的时间是有限的,在这种情况下,描述清晰的 PR 常常会优先得到处理。以我为例,我一般只能在工作日中抽出约一小时的时间来评审 Envoy Gateway 项目中的 PR。因为了 PR 评审,我需要处理工作邮件,客户问题,编写公司产品以及 Envoy Gateway 代码等其他事情。在这有限的这一小时内,我希望能够最大化产出,评审尽量多的 PR。因此我会优先处理描述清晰,容易理解的 PR,对于那些需要花费较长时间来进行理解的 PR,我一般会放到时间比较空闲的时候再来处理。

那什么是好的 PR 描述,什么是不好的呢?一个好的 PR 描述中会说明这个 PR 提交的目的,以及为了这个目的做了那些代码修改,并且会提供该 PR 相关的 Issue 的链接。如果该 PR 涉及到多个模块的修改,最好在 PR 描述中简明扼要地说明这些模块的修改。

先举一个不好的示范:

This PR fixes a bug in the HTTP Listeners.

可以看到,该描述过于简单,几乎没有为评审者提供任何可用的信息。这导致评审者需要从代码差异中去猜测这个 PR 的目的,增加了评审的难度。

在一个好的描述中,我们应该说明该 PR 处理的是什么 bug,以及如何修复的。

对于上面的示例,我们可以改为:

This PR fixes the bug xxx(issue 链接) in the HTTP Listeners. The bug is caused by missing HTTP filters in the filter chain of the HCM (HttpConnectionManager) in the translated xDS when the MergeGateway option is enabled. To fix it, the missing filters have been patched to the existing HCM when translating ir.HTTPRoute to the xDS.

修改之后的描述中,我们明确说明了该 PR 处理的是什么 bug,以及 bug 的原因和修复方法。这样的描述可以让评审者快速了解该 PR 的目的,更容易将代码改动和 PR 的目的联系起来,从而加快 PR 的评审过程。

为了帮助开发者对 PR 进行描述,开源项目一般都会提供一个 PR 描述模版,模版会列出需要填写的内容。我们在提交 PR 时应尽量使用项目提供的 PR 模版

例如 Envoy Gateway 的 PR 模版如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
**What type of PR is this?**
<!--
Your PR title should be descriptive, and generally start with type that contains a subsystem name with `()` if necessary 
and summary followed by a colon. format `chore/docs/feat/fix/refactor/style/test: summary`.
Examples:
* "docs: fix grammar error"
* "feat(translator): add new feature"
* "fix: fix xx bug"
* "chore: change ci & build tools etc"
-->

**What this PR does / why we need it**:

**Which issue(s) this PR fixes**:
<!--
*Automatically closes linked issue when PR is merged.
Usage: `Fixes #<issue number>`, or `Fixes (paste link of issue)`.
-->
Fixes #

可以看到 Envoy Gateway 的 PR 描述模版中已经包含了一个 PR 描述中需要的所有内容,包括 PR 的类型,PR 的修改内容/目的,以及该 PR 关联的 Issue。只要我们在提交 PR 时按照该模版的要求进行填写,就可以为 PR 提供一个清晰的描述。

避免 “巨型” PR

PR 的理想长度是多少?这个并没有一个固定的答案,但是总的来说,一个 PR 中包含的内容越多,最终合入主分支的时间也需要得越长

我曾经看到过包含了一百多个文件的 PR。我们应该尽量避免提交此类 “巨型” PR。 首先,一个“巨型” PR 的阅读难度很大,因为评审者需要在大量的代码差异中进行跳转,猜测 PR 作者修改每段代码的意图,评估修改是否合理。其次,一个改动范围很大的 PR 中引入的问题也会增多,评审者在 Review 时可能提出的修改意见也会相应地增加。评审难度的增加和问题修改的交互会导致 PR 需要很长时间的评审,而长时间的评审会增加 PR 合入主分支的难度,因为大量的代码修改和这段时间内主分支的其他改动大大增加了合入代码冲突的可能性。

所以一般建议不要提交过大的 PR,而是将此类改动拆分为多个较小的 PR 分别进行提交。可以有两种拆分方式:

按照功能拆分:一个 PR 中只包含一个功能的修改。和我一样,很多开发者都对代码有“洁癖”,在开发过程中,我们可能会在实现 PR 的时候顺便对代码进行重构,或者顺带修复一个 bug。这是一个非常好的习惯,可以保证代码库的整洁,有利于代码的可读性以及项目的维护。但是,如果这些重构或者 bug 修复和当前 PR 的功能修改无关,建议将其拆分为另一个 PR。

在 PR 中引入和本 PR 无关的改动会让评审者在进行代码 Review 时感到迷惑:某一段代码改动到底为了实现 PR 中描述的功能,还是为了其他目的?这增加了代码阅读的难度。而保持 PR 的独立性则让评审者更容易将代码的修改和 PR 的目的联系起来,从而更快地 Review 代码。

当然,这条并不是绝对的,如果这些重构或者 bug 修复和当前 PR 的功能修改关联紧密,或者改动非常小(例如只是修改了一个拼写错误),建议还是放在一个 PR 中。

按照模块拆分:有时候,PR 中修复一个问题或者一个功能涉及到多个模块,则可以按照模块提交修复的PR。以 Envoy Gateway 举例,一个新的功能可能涉及到 API,Gateway API translator,xds translator,e2e test, user docs 等部分的修改。因此理论上最多可以拆分为 5 个 PR。

当然 PR 也不是拆分得越细越好,对于较小的改动,拆分得过细反而会让评审时不容易看到修改的全貌。大部分的情况下,拆分为 API 和 实现 两个 PR 就可以了。如果改动很大,则可以按模块拆分得更细一些。我的建议是 API 一定要拆分的,因为在 API 达成一致前去实现该功能很可能走错方向,导致实现代码在评审后被推翻返工,浪费了你的时间。

PR 中的社区礼仪

在开源社区的工作中,百分之九十以上的交流都是通过 github,slack,邮件等间接的沟通方式进行的。在这种情况下,荧幕后的另一方无法像面对面交流那样通过你的面部表情、说话的语气、肢体动作等得知我们的情感,因此我们留下的文字就变得特别的重要。在我们的文字表达中,建议尽量使用礼貌,积极的语气,尊重他人的劳动成果和意见,并感谢他人的帮助以及为此付出的时间。

对于国内的开发者来说,英语的表达有可能会有一些小问题。开源社区是一个国际社区,里面的人来自世界各地,开源社区大部分情况下是以英文作为主要工作语言的。作为非英语母语者,我们对于英语的语气可能不太敏感。一些我们自己觉得没有问题的英语表达可能会稍显生硬,甚至有时候会让人感觉不礼貌。对此,我总结了几个我自己在开源社区中交流的小技巧:

  • 用积极的语气表达自己的意见。用负面/消极的说法会让人感觉被指责,从而感觉不快。改用正面/积极的语气表达自己的意见,可以让你的意见更容易被接受。 例如,可以将这句话:There’s a memory leaking problem in the current implemtation. 改为:We can improve memory consumption by adding a cleanup function. 修改之后的句子中,我们没有直接指出问题,而是提出了一个改进的方案,这样可以让人感觉更加积极。
  • 使用情态动词来表示不确定性。在表达自己的意见时,我们很多时候并不能确保自己的意见是绝对正确的。或者,即使我们认为自己的意见是正确的,我们也应该抱着商量的态度和项目中的其他人讨论,尊重他人的意见。 在表达自己的意见时,我们可以使用 might, could, may 等情态动词词,表示自己并不假设自己的意见是绝对正确的。 例如,我们可以将这句话:I don’t think this is the best way to resolve the issue. 改为: This might not be the best way to resolve the issue. 在修改之后的句子中,我们使用了 might 这个情态动词,表示自己的意见并不是绝对正确的,语气也不会显得那么生硬。
  • 使用疑问句来代替陈述句,尽量避免命令句。在表达自己的意见时,我们可以使用疑问句,以商量的态度来征求他人的意见,而不是直接命令对方。这样可以让人感觉更加友好。 例如,我们可以将这句话:We also need to expose the foo field in the API since it’s widely used in the client code. 改为:Should we expose the foo field in the API? It’s widely used in the client code. 对比这两个句子,是否可以感到修改前的句子语气相对强硬,让人约感不快? 而在修改后的句子中,我们可以感受到作者的商量的态度,而不是强势的表达自己的意见。
  • 在提出改进意见前,先肯定他人为此付出的工作。这一点非常重要,因为当我们的工作被别人指出问题时, 大部分人都会有一种自我保护的心态,自然会有对此产生一种抵触情绪。如果在提出改进意见前,先肯定他人的工作,可以有效地缓解这种抵触情绪,让对方从心理上更容易就我们提出的问题进行讨论。 例如,我们可以将这句话:I have some suggestion. 改为: I think this is a good idea, just have a few suggestions on … 将这句话:This is wrong. 改为:This is a good start, but I think we could improve it by … 在修改之后的句子中,我们先肯定了对方的工作,然后提出了自己的改进意见。这样可以让对方更容易接受我们的意见。

上面只是一些非常简单的例子。其实我也常常遇到对自己的英语表达不确定的时候,这种时候,我一般会使用 ChatGPT 或者 Gemini 对自己的表达进行改进。一个简单的 Prompt “Please rewrite my sentence and make it polite” 就可以了。大家也可以试试。

这些开源社区的礼节并不是“繁文缛节”,而是为了让我们的交流更加顺畅和愉快。我自己的体会是,在开源社区里面,越是厉害的大牛,对于其他人越是礼貌。和他们合作,有一种如沐春风的感觉。

这里有一个很好的示例: https://github.com/kubernetes-sigs/gateway-api/pull/2283 。这是我向 Gateway API 项目提交的一个 PR,PR 本身很简单,只是为一个 API 增加了一个 Envoy Gateway 需要的字段,但是由于 Gateway API 对于这个字段的设计有一些争议,因此 Mantianer 对于这个 PR 进行了很长时间的讨论。在这个讨论中,Mantianer 对于我的 PR 提出了很多意见,但是他们的表达都非常礼貌,整个讨论过程非常愉快。最终,PR 也被合入了主分支。

下面是其中一个 Maintainer 对于我的 PR 的一个评论,可以看到他的表达中采用了上诉提到的一些 PR 礼仪:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Hey @zhaohuabing, thanks for working on this! If I'm understanding correctly, it looks like you're trying to take on a couple of separate issues:

Adding SectionName to PolicyTargetReference (Update TargetREf in Policy GEP #2147)
Adding Name to Route Rules (GEP: Add Name to HTTPRouteRule and HTTPRouteMatch #995)
I think we mostly have consensus on 1, but we're waiting for #2128 to merge before moving forward. On 2, I don't think we quite have enough consensus to move forward yet. Maybe once #2128 merges you can check in with @arkodg to see if he needs any help with the implementation of #2147.

It may also be helpful to take a look at our documentation for the GEP process. All API changes have to go through that process so we can't start directly with a PR to change the API itself without first having an approved GEP in an "implementable" state.

欢迎大家为 Envoy Gateway 提交 PR

希望这篇文章中的这些小小的经验能够帮助到大家。同时欢迎感兴趣的朋友参与 Envoy Gateway 开源项目。对于初次参加项目的开发者,可以考虑先从文档和一些简单的 bug 修复开始,熟悉项目的代码风格和贡献流程。可以搜索 Envoy Gateway Github repo 中 带 “help wanted” tag 的issue,查找自己感兴趣的贡献点。除此之外,现在 Envoy Gateway 的中文官方网站正在建设中,者对于初次参与项目的同学来说是一个很好的入门机会。我们非常欢迎大家参与其中,为 Envoy Gateway 的中文文档贡献力量。

如果有任何问题,可以在项目的 Issue 中提问,我们会尽力为大家解答。对于 PR 提交者,我们也会尽力为 PR 提交者提供帮助,帮助 PR 尽快合入主分支。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
以Dubbo为例,聊聊如何为开源项目做贡献
Github 上有众多优秀的开源项目,大多数 IT 从业者将其当做了予取予求的工具库,遇到什么需求,先去 Github 搜一把,但有没有想过有一天自己也可以给开源事业做一些贡献呢?本文将会以 incubator-dubbo 项目为例,向你阐释,给开源项目做贡献并不是一件难事。
kirito-moe
2018/09/30
7410
以Dubbo为例,聊聊如何为开源项目做贡献
如何给开源社区提交代码
最近一段时间在做数据库相关,给一些开源社区提交过几个issue与pr,今天来简单复盘一下。
公众号guangcity
2023/11/14
1670
如何给开源社区提交代码
如何从零开始参与大型开源项目
PingCAP
2017/05/18
8890
如何从零开始参与大型开源项目
大学生开发者通过开源项目积累实践经验指南
开源社区为开发者提供了一个展示技能、学习新技术和与全球开发者合作的机会。对于在校生来说,参与开源不仅能帮助他们提升技术水平,还能积累实战经验、增强就业竞争力。本文将探讨在校生如何积极参与开源,并分享一些实践建议和代码实例。
一键难忘
2025/01/03
1300
Github 开源项目贡献指南:如何给开源项目做贡献 (上)
腾讯开源
2017/05/05
3.4K0
Github 开源项目贡献指南:如何给开源项目做贡献 (上)
杂谈|作为软件开发人员如何为开源社区助力
阅读过《软技能:代码之外的生存指南(第2版)》这本书籍📚的小伙伴可能都知道,作为一名软件开发人员,有很多定向的技术书籍📚可以提供给你学习技术方面的知识,而在学习技术之外的软技能本书籍并没有提供多少,而是讲述了软件开发人员的职业问题、自我营销、学习、生产力、理财、健身、心态等七大章节,其中自我营销和学习章节应该是关于此次话题的讨论点——软件开发人员如何在自我营销和学习中为开源社区助力。
六月暴雪飞梨花
2025/01/09
1552
杂谈|作为软件开发人员如何为开源社区助力
维护开源已经很困难了,而GitHub还在进一步破坏
文 | 白开水 出品 | OSC开源社区(ID:oschina2013) 此前,我们曾报道了 GitHub 封锁受美国制裁公司的俄罗斯开发人员账户。 该平台的这一举措不可避免的带来了一些破坏性的副作用,苹果开发者社区两个热门项目 Quick 和 Nimble 的首席维护者 Jesse Squires 近日就发文控诉称,“但似乎 GitHub 并没有完全考虑到这一点,因为这些账户的封停正在搞砸我的项目。” Jesse 在其个人博客中指出,Quick 5.0 版本已于几天前发布。在发布前的一周里,他曾审查并合
程序猿DD
2022/05/05
3710
维护开源已经很困难了,而GitHub还在进一步破坏
Apache ECharts 团队:ASF 顶级项目是怎么炼成的? | 顶尖技术团队访谈
优秀的产品背后,必定有优秀的团队做支撑。《顶尖技术团队访谈录》系列采访以国内知名公司的 IT 技术团队为线索,展示他们的文化、思想与经验。本期,InfoQ 走进 Apache ECharts 核心团队,了解 ASF 顶级项目背后的故事和团队沉淀下来的开源经验。  Apache ECharts 是一个基于 Web 前端技术实现的数据可视化产品,它诞生于 2013 年,由百度 EFE 团队创建并开源,并于 2018 年 1 月捐赠给 Apache 软件基金会。2020 年年底,团队发布了全新重量级的 Apach
深度学习与Python
2023/04/01
5660
Apache ECharts 团队:ASF 顶级项目是怎么炼成的? | 顶尖技术团队访谈
总结最近半年对Elasticsearch开源项目的贡献
自从2019年对Elasticsearch项目提交过一次代码之后,开始逐渐关注社区里的新动态,并且尝试去解决一些看起来容易上手的issue,通过这个过程去理解源码从而可以深入理解Elasticsearch的实现机制,从中受益颇丰。现在把最近半年(2020年1月-2020年6月)对Elasticsearch项目所做的工作进行一次总结,记录遇到的问题和解决办法。
bellen
2020/06/15
1.8K0
总结最近半年对Elasticsearch开源项目的贡献
全球首个工业级联邦学习开源平台FATE:邀请社区开发者和用户参与
题图摄于故宫 (我们正在参与 FATE 开源社区里面的工作,也欢迎联邦学习、隐私计算等领域的开发者和用户,来与我们合作或参与项目。) FATE(Federated AI Technology Enabler)开源社区是全球首个隐私计算、联邦学习开源社区,拥有全球首个工业级安全联邦学习框架。根据中国信息通讯研究院等单位发布的《隐私计算白皮书(2021)》中显示,55% 的国内隐私计算产品是基于或参考开源项目开发的,其中以 FATE 开源项目为主。 FATE开源社区开发专委会以“开源开放,共力创新”为愿景,
Henry Zhang
2023/04/04
4990
全球首个工业级联邦学习开源平台FATE:邀请社区开发者和用户参与
Github 开源项目贡献指南:如何给开源项目做贡献 (下)
本文是【Github开源项目贡献指南】系列的第一章的下篇,接上篇《Github 开源项目贡献指南-如何给开源项目做贡献 (上)》。 高效率的沟通 不管你是一个一次性的贡献者还是想要加入社区,和他人合作
腾讯开源
2017/05/05
2.2K0
开源项目有哪些机遇与挑战?
大家好,我是默语,擅长全栈开发、运维和人工智能技术。在这篇文章中,我将深入探讨开源项目的机遇与挑战。随着全球科技的快速发展,开源软件项目成为了开发者社区的热门话题。越来越多的开发者和企业参与其中,以推动技术创新和实现协作共赢。本篇博客将详细介绍开源项目的发展趋势、参与开源的经验分享以及开源项目面临的挑战与解决方法。
默 语
2024/11/22
1490
如何优雅的玩转 Git
Git 和其它版本控制系统(包括 Subversion 和近似工具)的主要差别在于 Git 对待数据的方式。 从概念上来说,其它大部分系统以文件变更列表的方式存储信息,而 Git 是把数据看作是对小型文件系统的一系列快照。
硬件开源小站
2023/04/07
1.6K0
如何优雅的玩转 Git
FATE开源社区3月份开发工作进展
题图摄于北京二环路 (我们参与了联邦学习全球首个工业级开源平台 FATE 项目的开发工作,给大家说说3月份进展情况。 )  FATE(Federated AI Technology Enabler)开源社区是全球首个隐私计算、联邦学习开源社区,拥有全球首个工业级安全联邦学习框架。根据中国信息通讯研究院等单位发布的《隐私计算白皮书(2021)》中显示,55% 的国内隐私计算产品是基于或参考开源项目开发的,其中以 FATE 开源项目为主。 FATE开源社区开发专委会在3月份召开了两次工作会议,参会成员总结了现阶
Henry Zhang
2023/04/04
3670
FATE开源社区3月份开发工作进展
长安链开源社区提问攻略,看这一篇就够了
随着长安链chainmaker开源社区影响力提升,吸引了越来越多的开发者加入,社区开发者的技术交流与协作也越来越密切。如何更好地加入到chainmaker社区协作中?你可以先从社区提问开始!
bengbengsu
2022/06/14
8511
长安链开源社区提问攻略,看这一篇就够了
Ding!您有一份ChunJun实用指南,请查收
ChunJun 是易用、稳定、高效的批流一体的数据集成框架,主要应用于大数据开发平台的数据同步 / 数据集成模块,使大数据开发人员可简洁、快速的完成数据同步任务开发,供企业数据业务使用。
袋鼠云数栈
2022/08/19
3470
史上最全的开源项目创作指南
前段时间我在逛github的时候,偶然间发现,我的github已经拥有12个star过百的开源项目,2个star过千的项目。回首一想,原来我做开源项目已经快3年了,想想这一路走下来真的非常不易。
xuexiangjys
2022/04/18
3700
史上最全的开源项目创作指南
TiDB 开源社区指南(上)
本系列文章旨在帮助社区开发者了解 TiDB 项目的全貌,更好的参与 TiDB 项目开发。大致会分两个角度进行描述:
PingCAP
2018/11/09
9160
开源项目管理工具——Focalboard部署与实践
在当今软件开发的快节奏世界里,项目管理无疑是最不可或缺的技能之一。这期的互选题让我们聚焦于如何管理开源项目,今天的文章是针对小胡同学提出的选题展开分享的。如果你是刚刚踏入这一领域的开发者,那么选择合适的工具和方法来高效管理你的开源项目,不仅能提升工作效率,还能确保你的项目按时且高质量地交付。接下来,我们将一起探索如何借助开源工具 Focalboard 来管理项目,并通过 Docker 部署来让一切变得简单又高效。
VyrnSynx
2025/01/08
9120
开源究竟有什么魅力?听完这 4 个故事你也许会明白
零 导语 如今,「开源」在国内外已不是一个新名词,随着数字化转型、云原生、各路玩家的加入,开源生态日新月异。 除了早年已建立起庞大社区和丰富生态的 Docker、Nginx、Kubernetes 等开源项目,近年来,也涌现出一批优秀的开源项目,比如 Apache APISIX、Apache SkyWalking、TiDB 等,吸引了一大批有技术热情、喜欢开源文化的同学。Apache APISIX PMC 成员王院生如是说,「参与开源,让我觉得自己终于与这个世界融为一体,不再是孤立的个体。」 两周前,院生以
腾源会
2022/03/10
3880
推荐阅读
相关推荐
以Dubbo为例,聊聊如何为开源项目做贡献
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档