事情是这样的,在我浏览VuePress(v2.x)官方文档来搭建站点的时候,发现了一个明显的小错误:

2022-155 (1)

于是想着参与修正一下这个地方,并尽量规范地走一遍参与开源项目Pull request的流程

Fork项目

首先是Fork原项目到自己的仓库中,毕竟咱也不能直接在人家仓库里改东西。

在git中,fork是“分叉”、“复制”的意思。fork可以复制出一个仓库的新拷贝,包含了原有库中的所有提交记录,fork后这个代码库是完全独立的,可以在自己的库中做任何修改,也可以向原来的库提交合并请求。

clone项目

然后将我们Fork到自己仓库中的项目克隆到本地。

1
2
# 克隆命令会自动以仓库名称创建项目文件夹
git clone git@github.com:用户名/仓库名.git

创建自己的分支

克隆后先不急着修改源码,而是先创建一个自己的分支。

1
2
3
4
5
6
7
8
# 进入项目文件夹
cd vuepress-next

# 创建并切换到自己的分支
git checkout -b docs-fix

# 查看当前分支(2个,自己的分支和主分支)
git branch

修改项目内容

接下来就可以对项目大展身手了,比如我进行了项目中文档的修改(中英文档共计2处)。

2022-155 (2)

提交更改

接下来就是经典的git三步走了

git add

1
2
# 添加当前目录下的所有文件到暂存区
git add .

git commit

这里注意一下,我们参与开源项目提交的message格式尽量规范一些,一般以英文为主。

  • git commit message 提交格式规范总结

    type(提交类别) 说明
    feat 添加新功能特性(feature),如产品、技术需求、技术优化等功能开发
    fix 修复bug
    docs 仅仅更新修改了文档
    style 仅仅修改了空格、格式缩进、逗号分号等等,不改变代码逻辑
    build 构造工具的或者外部依赖的改动,例如webpack,npm
    refactor 代码重构,没有添加新功能或者修复bug
    revert 执行git revert,回滚到上一个版本
    test 增加测试用例,添加缺失的测试或更正现有的测试
    chore 不修改src或者test的其余修改,例如改变构建流程、或者增加依赖库、辅助工具等的变动
    ci 与CI(持续集成服务)有关的改动
    perf 改进性能的代码更改

    举例:feat: 添加了图表功能,来围观一下VuePress的commit记录:
    2022-155 (3)

比如我的这次修改,是修复了docs里guide指南中page文档的路由相关错误,对应英文描述docs: fix the routing related errors of the page document in the guide

1
2
# 将暂存区内容添加到仓库中
git commit -m "docs: fix the routing related errors of the page document in the guide"

执行过程如下:

1
2
3
$ git commit -m "docs: fix the routing related errors of the page document in the guide"
[docs-fix 7ba01fcd] docs: fix the routing related errors of the page document in the guide
2 files changed, 2 insertions(+), 2 deletions(-)

git push

1
2
# 将本地的分支版本上传到远程仓库,并在远端仓库建立docs-fix分支
git push -u origin docs-fix

其中参数-u创建了一个上游跟踪连接。如果你第一次推送某个新分支到远程仓库,它是非常有用的。也就是说,它用来将本地新分支同步到线上。

执行过程如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ git push -u origin docs-fix
Enumerating objects: 15, done.
Counting objects: 100% (15/15), done.
Delta compression using up to 4 threads
Compressing objects: 100% (8/8), done.
Writing objects: 100% (8/8), 667 bytes | 222.00 KiB/s, done.
Total 8 (delta 7), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (7/7), completed with 7 local objects.
remote:
remote: Create a pull request for 'docs-fix' on GitHub by visiting:
remote: https://github.com/Barry-Flynn/vuepress-next/pull/new/docs-fix
remote:
To github.com:Barry-Flynn/vuepress-next.git
* [new branch] docs-fix -> docs-fix
Branch 'docs-fix' set up to track remote branch 'docs-fix' from 'origin'.

然后刷新自己的 GitHub 仓库就可以看到刚刚上传的新分支了


创建PR

  • 点击仓库上方 Compare & pull request 按钮,创建一个PR

    2022-155 (4)

  • Open a pull request页面可以给该开源项目作者或维护者留言,然后点击Create pull request按钮

    2022-155 (5)

  • 创建好后会跳转到这个页面,接下来就等作者去Merge pull request了。如果作者对你写的代码有疑问,会直接在代码里进行评论,这时候你就需要去解答一下。如果顺利的话,你就能“混”到一个开源项目贡献者的头衔。

    2022-155 (6)


总结感悟

现在能理解Pull requests是啥了不?拉取请求,合并请求?

看到知乎有个回答很生动:我改了你们的代码,你们拉回去看看吧 !!!

To request you to pull my code, is called “pull request”.(求拉!)


后续进度

  • 次日晚十点左右,项目维护者审查了提交内容,我也收到了该PR批准通过的提醒邮件。

    2022-155 (7)

  • 第三天下午,仓库作者进行了回复,Updata相关文件的错误内容后,Merged #1163 into main.

    2022-155 (8)

  • 真是一次难忘的体验,第一次提交的PR就被开源项目合并了,下面几张图片就当作我和维护项目的作者们的合影吧,虽然我只是做了微小的工作。

    2022-155 (9)
    2022-155 (10)

在PR页面的最后,GitHub系统提示我下方信息,并给我了个Delete branch按钮:

Pull request successfully merged and closed
You’re all set — the Barry-Flynn:docs-fix branch can be safely deleted.
If you wish, you can also delete this fork of vuepress/vuepress-next in the settings.

点击完Delete branch之后,我主页Fork的该仓库里,创建的docs-fix分支就被安全的删除了。

如果我想的话,我还可以在设置里从我主页彻底删除该仓库,就像我从未参与过一样。

我想了想,还是留着吧,挺有纪念意义的。