近期在玩一个 GitHub 项目,叫 FastGPT,里面支持可视化编辑工作流(名为高级编排功能),于是借助这功能搞了个“全能助手”,大意是突破 ChatGPT 不能联网的限制,针对用户提出的问题进行分类,然后去调接口获取相应的数据支持,再由 GPT 整合结果后回复。本来在群里面想问管理员问题,没想到管理员说想让我提个PR把案例放上文档。原本我玩 GitHub 一般是个看客,最多提提 Issue ,PR 我倒是没提过,借助这次机会,也尝试一下吧,于是…

大纲

所谓 PR,全称是 Pull Request,即拉取请求,是 GitHub 上面的一个功能,可以让你把自己的代码提交到别人的仓库,让别人来审核,如果通过,就可以合并到别人的仓库里面,这样就可以让你的代码被更多人看到,也可以让你的代码被更多人使用。

要在别人的开源项目上提PR,大概需要以下步骤:

  1. Fork 源项目到自己的账号下,称为 Fork 项目吧
  2. 将自己项目下的 Fork 项目克隆到本地
  3. 新增分支,修改代码,提交到自己的 Fork 项目
  4. 在 GitHub 上面提 PR

具体步骤

接下来以我 Fork 的项目为例,讲下具体步骤。

前置步骤

很关键,我原本按流程提了 PR 后,后面项目管理员想要合并的时候发现我的提交没有签名验证导致无法合并

如图,有这个标签的才说明该提交已经通过签名验证:

所以再提交代码先,需要先配置一下签名验证,签名验证有 SSH 和 GPG 两种方式,以下只讲下 GPG,具体步骤如下:

  1. windows下,安装 GPG,下载地址:www.gpg4win.org
  2. 默认安装在 C:\Program Files (x86)\Gpg4win,记住这个目录
  3. 创建 个人 OpenPGP 密钥对
  4. 导出
  5. 将导出的文件用文本方式打开,复制里面的内容
  6. 进入github,https://github.com/settings/keys,点击 New GPG key,将复制的内容粘贴进去,点击 Add GPG key。记下 KeyID
  7. 配置 git,打开 git bash,输入以下命令
# 设置 Git 全局提交都要签名
git config --global commit.gpgsign true

# 设置 Git 全局要签名的Key
git config --global user.signingkey yourKeyID

# 设置 Git 全局使用的 gpg 程序路径
git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"
  1. 完成。之后你每次提交的代码都是经过签名验证的了

Fork 源项目到自己的账号下

将自己项目下的 Fork 项目克隆到本地

这一步没啥说的了

新增分支,修改代码,提交到自己的 Fork 项目

git checkout -b add-xxx
###修改后###
git add .
git commit -m "xxx"
git push

在 GitHub 上面提 PR

提交push代码后,你的 Fork 项目上就会出现一个 Compare & pull request 按钮,点击它,就可以提 PR 了

等待审核

提交 PR 后,项目管理员就会收到通知,然后会去审核你的代码,如果通过,就会合并到源项目里面,这样就完成了一次 PR。

二次修改PR

遇到比较多的情况就是你第一次提了 PR,但管理员审核后需要你进行修改,这种情况怎么做呢。

这里需要注意几个点:

  1. 我们的修改都是在原有的 PR 的基础上进行的,所以旧的 PR 不能 close 掉
  2. 多次修改意味着有多次 commit 记录,而开源项目往往不希望你一个 PR 里面有一堆 commit 记录,所以就需要将所有的 commit 记录合并成一个

步骤

  1. 首先,你需要在本地切换到你的 PR 分支,然后进行修改
  2. 修改完毕后。执行以下命令
git add .

# -s 表示签名,--amend 表示合并上一次提交,也就是和上一个提交的改动一起合并为一个提交记录(并且可以改 commit log)
git commit -s --amend 

# -f 表示强制推送,因为用了 --amend,所以需要强制推送
git push -f
  1. push后你在原因的 PR 页面上就能看到你的修改了,然后管理员会再次审核,如果通过,就会合并到源项目里面,这样就完成了一次 PR。