写点什么

在 GitHub 中向开源项目提交 PR 的过程

用户头像
worry
关注
发布于: 2021 年 01 月 15 日
在GitHub中向开源项目提交PR的过程

本文主要对在 GitHub 中向开源项目提交 PR(Pull Request)的过程进行一些总结。

概述

我们在使用开源项目的过程中,发现一个新的需求,但是开源项目不支持,这时我们就可以在开源项目的基础上实现这个需求,向开源项目提交 PR,让开源项目考虑后续版本是否接纳该需求。提交 PR 是参与开源项目,为开源项目做贡献的起点。

提交 PR 的过程包括:fork 开源项目到自己的 Github 账户下,clone 项目到自己的本地仓库,建立本地仓库到远程仓库的 remote 链接,新建本地分支,修改代码,提交代码到自己的 Github 远程仓库,新建 PR。


详细步骤

下面我们就逐一进行详细说明(忽略申请 Github 账号、添加 ssh 公钥等过程)。

以向https://github.com/Wechat-Group/WxJava提交 PR 为例。

我的 Github 地址:https://github.com/huagetai


fork 开源项目


进去后,点出 fork,稍等片刻,此项目便会出现在自己的仓库中


进到自己 fork 的项目中,就能看到 Clone 按钮,如下,复制这个 https 链接。


通过上面的步骤,已经将远程仓库建好


clone 项目

需要将自己 fork 的远程仓库 clone 到本地,此处省略安装本地 github 的过程,进入本地项目 wokspace,执行一下 git clone https://github.com/huagetai/WxJava.git(使用上一步的 https 链接),等待命令完成。


上面的命令完成后,当前目录下会多一个目录,我 clone 的是WxJava,所以会多一个WxJava目录,进到WxJava目录中,试试跑一下 git status 试试,会提示现在是 develop 分支。


remote 远程

用 git remote -v 命令,可以看到此时只与自己的远程仓库建立了连接


还需要与上游建立连接,这里上游指的是一开始 fork 的那个项目源,以本文WxJava为例,执行如下命令:

git remote add upstream https://github.com/Wechat-Group/WxJava

再用 git remote -v 可以看到:


接下来就能创建分支了。

创建本地分支

接着上面的运行命令:git checkout -b WxJava-B1,这个命令的意思是创建一个叫 flink-fs 的分支,运行这个命令后 bash 将自动切换到新的分支下了


修改代码


自行修改代码哈


提交修改的代码到本地分支,推送本地分支到 Github 远程仓库

可以先使用 git status 来查看有哪些文件被修改了

然后再 git add ***.java 将要提交的文件都加上

然后再 git commit -m "modify XX",需要注意的是 git commit 只是把修改的代码提交到当前分支(当前分支是WxJava-B1,而不是 develop),”modify XX”是本次提交的简单说明

然后再 git push origin WxJava-B1,这一步才是将当前分支推送到自己的远程仓库。

这时,在自己的远程仓库便能看刚才 push 上去的分支了。


新建 PR

点击 New pull request,


需要注意的是 compare 处选择刚才提交上来的分支


然后点 Create pull request

写好名字,写好说明,提交,就 OK 啦。


关于 check 不通过的问题

github 有代码自己编译和 check 机制,在你提交 pr 的时候,项目可能已经有了比较大的变更(每天都有世界各地的 coder 提 pr),而你没有将分支保持与项目同步,所以有可能会导致 check 失败,pr 被无视。

还记得我们在自己本地有一个WxJava develop 分支,然后又拉了一个WxJava-B1 分支,然后在WxJava-B1 上进行修改,提交的也是WxJava-B1,然后又想起了之前有一步是“与上游建立连接”,说到你可能已经知道了 develop 的作用–用于远程代码同步。

所以每次提交 pr 前,都要先从做代码同步。过程如下:

先 fetch,执行:git fetch upstream

再 rebase,执行:git rebase upstream/develop

再 push develop,执行:git push origin develop

push 完后,远程仓库便可看到你的 branch 版本和 develop 分支一致了,否则这个位置会显示与 develop 相差了多少次 commit。

做完这些操作,就可以回到之前的详细过程来操作了。


用户头像

worry

关注

心若有翼,我自飞翔 2018.01.25 加入

一个戴着眼睛的肥胖的扑腾蛾子

评论

发布
暂无评论
在GitHub中向开源项目提交PR的过程