如何向开源项目提交 PR
作者:@zhangsibo1129
以 ONNX Runtime 开源项目为例,介绍如何向开源项目提交 PR
开发分支管理
1. 开发仓库关系
在贡献开源的场景下,开发涉及到三个仓库:Github-Upstream 上游仓库,Github-Origin 个人远程仓库,Local Repository 本地仓库。如下图所示,以 ONNX Runtime 开源项目为例,上游仓库对应 microsoft/onnxruntime,个人远程仓库对应 zhangsibo1129/onnxruntime,本地仓库对应着克隆到本地计算机的代码
三者关系如图,首先从 Github-Upstream 上游仓库 Fork 一个个人远程仓库 Github-Origin,并从上游仓库 clone/fetch 最新提交信息同步到本地仓库;在本地仓库创建开发分支,进行代码开发,开发完毕后将代码 push 到个人远程仓库的分支;最后从个人远程仓库向上游仓库主干分支提交 Pull Request。
2. 个人仓库创建
进入 ONNX Runtime 开源项目主页,Fork 该项目到个人仓库
克隆代码到本地仓库,设置上游仓库和个人远程仓库
1 | # 从 upstream 克隆项目到本地 |
显示如下,配置完毕
1 | origin git@github.com:zhangsibo1129/onnxruntime.git (fetch) |
3. 开发分支创建
新建并切换到本地开发分支
1 | git checkout -b my_dev_branch |
本地代码开发
1. 从上游获取更新
同步 upstream 与 origin 仓库的 main 分支
1 | # 获取 upstream 仓库的更新 |
2. 变基到最新分支
将当前开发分支进行变基操作
1 | # 切换到本地开发分支 |
3. 代码开发
修改onnxruntime/core/providers/cann/cann_execution_provider.cc
代码,运行git diff
。
提交代码并创建 PR
代码开发完毕,但只存在本地仓库中,要先推送到个人远程仓库,才能向上游仓库提交 PR
1. 推送到个人远程仓库
提交代码到本地开发分支
1 | # 添加修改文件 |
将本地开发分支推送到远程个人仓库
1 | git push origin my_dev_branch |
此时,修改后的代码已经合入了远程个人仓库的开发分支 origin/my_dev_branch
2. 向上游创建 PR
创建 PR 的作用是将 origin/my_dev_branch
合入 upstream/main
,从而实现将自己开发的代码贡献给上游社区,该操作在 Github 网页上完成,如下图所示在个人远程仓库页面创建新 PR
选择正确的分支,依次按提示点击
review 以及静态检查、CI 构建等通过后,committer 会进行合入操作,合入成功显示如下信息