由于今年工作相对较清闲,所以闲暇时间想在github参与开源项目。
不过,我以前对于git操作仅限于同组内的项目,很少有跨组合作修改,故此,我不是很了解开源项目的PR流程。
因此,稍微花了两天时间测试和梳理了一下PR流程,写成文档抛砖引玉,供大家参考和拍砖。
正文
这套流程目前已经在github上测试过数次,目前我个人没有遇到什么问题,算是比较完善的流程。
随着后续我对git的熟悉,我后续会不断完善该文档,这里抛砖引玉,大家如果有意见,欢迎在评论区留言。
本文面向有一定git基础知识的朋友,完全不懂git的朋友,最好先学习一下git的基础知识,不用太多,如下列所示,够用就行。
- 明白git他人仓库和自己仓库的区别
- 使用git进行项目的下载和提交
- 明白git分支及如何操作分支合并
好,话不多说,我们直接开始。
fork项目
首先,找到一个你有兴趣贡献的开源项目,可以是GitHub、GitLab或其他代码托管平台上的任何项目。
然后,我们需要fork你感兴趣的这个项目。
“fork”,是指创建一个现有仓库的副本到自己的git账户下。
这个副本通常是在你自己的账户或组织下创建的,这样你就有了原始项目的个人副本,可以在其中自由地进行修改而不会影响到原项目。
当你“fork”一个项目时,会发生以下几件事情:
- 你会得到一个与原始仓库完全相同的仓库副本。
- 这个副本位于你自己的GitHub、GitLab等代码托管服务的账户下。
- 你可以在这个副本上进行任何修改而不影响到原始仓库。
本地开发
在fork了项目之后,我们需要将这个副本下载到本地进行开发,然后在这个副本的基础上进行修改。
这里要注意,我们需要clone的,是已经fork到自己名下的项目仓库,而不是这个原始项目的仓库。
创建分支
我们在clone
下来的项目基础上,签出一个分支,为接下来的开发做准备。
同步分支
这里要注意,我们fork过来,默认应该是master
或main
分支,我们并没有fork过来其他分支。
因此,我们需要关联原有项目,将源项目的其他分支也同步到自己的库中。
这里以我为例,比如,我这里要提交的项目是taozhi1010/nest-admin
这个项目(这是源项目)。
那么,现在将源项目(taozhi1010/nest-admin
)同步到自己的fork的项目仓库中(CrazyStudent13/nest-admin
)。
1 | # git remote add 源项目别名(自己随便命名) git提供的ssh地址 |
执行这条命令后,你就可以通过名称upstream
来引用这个远程仓库了。
例如,如果你想从这个远程仓库拉取更新,可以使用git fetch upstream
或git pull upstream
命令;
如果你要推送更改到该仓库,则可以使用git push upstream
命令(前提是拥有相应的权限)。
我们这里不做其他操作,先将远端的分支更新到本地。
1 | git fetch upstream |
将远程仓库(在这里别名为 upstream
)的 master
分支合并到你当前所在的分支。
1 | git merge upstream/master |
提交更改
根据项目的贡献指南,我们开始本地修改代码或文档,这里确保遵循项目的代码规范和风格指南。
在完成修改之后,我们可以使用命令或者图形化的git管理工具,提交内容。
总之,就是如下两个步骤。
- 添加更改:使用
git add .
来将所有更改标记为准备提交。 - 提交更改:使用
git commit -m "Your commit message"
提交更改,并附上描述性的提交信息。
推送更改到远程仓库
这里注意,推送不是推送到他人的仓库,而是推送到自己的远端仓库。
如之前一样,使用图形化工具或命令,将本地的commit
推送到远端仓库。
创建Pull Request (PR)
这时候,我以github为例,你登录到github的界面,打开那个同步过来的项目,你会发现有个非常明显的对比。
这里你点击一下,他会让你推送到源项目,是否要创建一个PR(pull request)。
这里,我们按照要求,填写PR描述,说明所做的更改及其原因。
然后,指定要合并的目标分支,通常是开发分支(dev),也可能主分支(如master或main)。
等待审查
提交后,项目的维护者或其他贡献者会审查你的PR。
他们会决定是否合并你的PR到自己的分支内。
解决反馈
如果收到反馈需要解决某些问题,那我们重新修改代码,再次推送。
合并
一旦你的PR被批准,它会被合并到主分支中。此时,你可以删除自己的功能分支(可选)。
以上就是给开源项目添加PR的一般流程。
不同的项目可能有不同的具体要求,所以请务必阅读项目的贡献指南以获得更详细的说明。
结语
走完上述流程,我们就算是完成一个PR了,如此,我们也算是参与开源项目了。
社区活跃度应该一些面试官比较喜欢的指标,多参与社区内的活跃项目,不仅能见识他人代码的精妙,也能让自己的努力被社区所见证。
因此,我很是推荐大家在开源社区中做出自己的贡献,哪怕只是一点点,都会让社区感到欣喜。
另外,本文由通义千问辅助编写,在一些命令的具体解释上,AI比人强了不少,比搜索引擎更是好用了太多。
不得不感叹,时代的伟力,能赶上AI风靡的大时代,不知道是幸运还是不幸。
当然,AI虽然辅助解释了部分命令,整体流程依然是我亲自把关的。
目前我已经根据这个流程提交了数次开源项目的PR,其中有些已经通过审核,确认整个流程无误,大家可以按照流程放心食用。