网站首页 文章专栏 参与开源提交pr的正确姿势
参与开源提交pr的正确姿势

一. 准备github账号

    申请账号,这一步就不说了,基本都懂,不会的自己百度下。


二. 提出issue

1. 在提交issue之前,请经过充分的搜索,确定该issue不是通过简单的检索即可以解决的问题。

2. 查看issue列表,确定该issue不是一个重复的问题。

3. 新建一个issue并选择您的issue类型。

4. 使用一个清晰并有描述性的标题来定义issue。

5. 根据模板填写必要信息。

6. 在提交issue之后,对该issue分配合适的标签。如:bug,enhancement,discussion等。

7. 请对自己提交的issue保持关注,在讨论中进一步提供必要信息。

二. fork你想要参与的项目

    

image.png

点击fork,稍等片刻,该项目便会在你自己的仓库中出现,fork一个项目的目的是,fork后会在自己的Github上生成了一个与原作者项目互不影响的副本,自己可以将自己Github上的这个项目再clone到本地进行修改,修改后再push,只有自己Github上的项目会发生改变,而原作者项目并不会受影响,避免了原作者项目被污染。


三.  clone代码,并设置

1). Clone 刚刚Fork 的 代码 到本地机器

git clone https://github.com/yangxing9/soul.git [此处应该是个人的 repository[repo]]

2). 设置 upstream 为 soul 的 repository

git remote add upstream https://github.com/dromara/soul.git

3). 提交一个issue

image.png

4). 然后回到本地Clone 的 Soul 代码目录 ,针对 你提交的 Issue 进行修改,但是修改前需要将分支修改下

git fetch upstream 同步上游修订,这里上游指的是一开始fork的那个项目源 使用fetch 命令, 然后在此基础上进行修订,以及PR 才是正确的,如果 fetch 有冲突,就先解决冲突
git checkout master
git merge upstream/master 此处有冲突解决冲突
git checkout -b issueNo   [此处的issueNo 就是你在源码的 repo 中提交的issue 产生的 编号,本例中是 #1052]

5). 开始增加/修改代码, 提交规范针对不同的开源项目要求,各自遵守

参见soul编码规范:soul编码规范

6).  本地测试没有问题,下面进行提交代码到你 Fork 库(本例就是源码库)分支上

git add 修改的代码 [最好是修改/新增 哪个文件 就 add 哪个文件]
git commit -m "commit log" -- 此处都要使用English,需要注意的是git commit只是把修改的代码提交到当前分支(当前分支是issueNo,而不是master)
git push origin issueNo  这一步才是将当前分支推送到自己的远程仓库

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


四. 提交pr

1). 在自己的github,发起pull request

image.png

此处为演示,实际应为具体的 issueNo分支,写好名字,写好说明,提交,就OK啦

2). 此时源码仓库会出现一个你提交的PR的请求提示,等待VP CodeReview ,通过就会Merge 你的 PR

3). 删除本地和远端的分支,同时拉取源码仓库你刚刚提交的更新

git checkout master
git branch -D issueNo
git push origin --delete issueNo

4). 为了每次提交commit 的整洁性 直接使用下面命令 直接强制同步原仓库

git fetch upstream && git reset --hard upstream/master && git push -f

5). 最后,为了让您的id 显示在 contributor 列表中,一定要设置

git config --global user.name "username"
git config --global user.email "username@mail.com"


至此完成了一次pr提交。


五. 关于check不通过的问题

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

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

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

git fetch upstream

git rebase upstream/master

git push origin master

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



版权声明:本文由星尘阁原创出品,转载请注明出处!

本文链接:http://www.52xingchen.cn/detail/66




赞助本站,网站的发展离不开你们的支持!
来说两句吧
大侠留个名吧,或者可以使用QQ登录。
: 您已登陆!可以继续留言。
最新评论