开源101之如何给开源库(Hertz)提PR

1,612 阅读4分钟

前言

最近在公司同学的热心帮助下尝试给开源库(Hertz——Golang高性能Http框架)提了一次PR,在这里浅浅地记录一下从提pr到merge的整个过程,方便自己以及有需要的掘友。

PR地址:feat: Support Hertz to use Consul for service discovery and registration by LemonFish873310466 · Pul

Step1:找到你感兴趣的开源库

image.png

搜索Github

首先,我们可以先选一些自己感兴趣的开源库,比如Hertz——Golang高性能HTTP框架等。

推广下有很多优秀小伙伴的CloudWeGo

image

查看Issues

然后查看Issues列表,我们可以看到这里有22个issues等待解决👀。

image

一般社区都会不定期发布一些新手任务,我们可以先从简单的任务开始。

其中,我们发现其中一个issue是Hertz准备对服务注册与发现进行拓展

image

Issue:github.com/cloudwego/h…

我们查看一下这个issue的详情,可以看到包括了以下几个部分

  1. 这个issue的描述以及目的

  2. 代码仓库在哪里

  3. 可参考的API

  4. 等等

image

主动申请

如果你觉得这个issue挺有意思,那么你可以主动地提出申请。

image

到此,我们就算拿到了这个issue的开发任务,接下来可以进行开发相关的工作。

Step2:编写代码

image.png

Fork 目标仓库

image

我们首先需要fork你想贡献的仓库到自己仓库中,通过fork我们可以编码且不会影响原仓库。

Clone 仓库

现在,我们已经包含了fork的仓库,此时我们需要把它clone到本地。

image

git clone [YOUR HTTPS ADDRESS]

创建新分支

clone完之后,我们接下来需要新创建一个分支进行我们的开发。

对于新增的feature,我们可以使用feat/xxx作为分支名称。

git checkout -b [BRANCH NAME]

开发并推送远端分支

通常开发需要包括实现代码、单测、README等

在完成了一些开发时,我们可以开始git 一键三连

  • git status

  • git add [YOUR FILE]

  • git commit -m [YOUR COMMIT MESSAGE]

  • git push origin [YOUR BRANCH]

单测结合github action

一般开源库都会结合github action进行单测流水线化,目录中会有.github/workflows/xxx.yml等文件,通过这些文件可以在提出pr、push等阶段进行校验。

因此,我们也需要更改这些文件,确保能执行自己的单测。

创建Pull Request

在推送完成之后,我们可以在自己fork的仓库中看到以下提示Compare & pull request

image

此前自己提pr的图没有截,这里引用一下参考:如何在 GitHub 提交第一个 pull request

接下来我们就可以填写关于PR的信息,通常情况下我们需要描述以下信息

  1. 这个PR是什么类型的(是feature还是fix等)

  2. 这个PR是做什么的

  3. 这个PR是否解决了某些issue

image

此前自己提pr的图没有截,这里引用一下参考:如何在 GitHub 提交第一个 pull request

填完PR的相关信息之后,恭喜你可以创建自己的PR啦!🥰🥰

同步原仓库的修改

在你开发的过程中,可能会有其他开发同学已经把自己的PR merge到main分支了。

那么这时候我们就把修改merge到自己的开发分支。

  1. 添加原始仓库作为upstream仓库
git remote add upstream [HTTPS]
  1. 获取原始仓库的变更
git fetch upstream
  1. 合并更改
git merge upstream/main
  1. 解决冲突并push到自己的开发分支

Step3:Fix原仓库维护者提出的建议

提完PR之后,我们需要确保所有单测和校验能通过。

同时也会有原仓库的维护人提出一些建议,需要我们去solve

  1. 单测需要补全

  2. 文档需要补充

  3. 代码实现逻辑有问题

  4. 等等

举个栗子:README需要补充详细一些

image

Step4:等待PR Merge

在所有校验步骤都完成之后,需要等待原仓库的人进行approve以及merge

image

当你的pr被正式采用时,会有以下提示。

image

最后,恭喜你向开源迈出了第一步!❤️

也非常欢迎大家一起来共建Hertz ❤️

参考

Hertz

字节跳动服务网格基于 Hertz 框架的落地实践

如何在 GitHub 提交第一个 pull request

Connection refused? Docker networking and how it impacts your image

GitHub Actions Documentation - GitHub Docs

What is Consul? | Consul by HashiCorp