Github Pull Request的提出与采纳

这一文来简要介绍一下Github Pull Request(以下简称PR)的使用方法:

  • 作为PR的提出者,如何对某个仓库提交PR,如何根据仓库管理者对所提交PR的反馈对PR进行完善
  • 作为PR的接收者,如何对PR进行测试,对提出者进行反馈以及合并PR到仓库中。

这里我使用两个GitHub账户来进行说明,PR接收者账户为lml256,PR提出者账户为rikkaii。并以lml256账户中的learngit仓库进行试验。

如何提出PR

如果你对Github上的某个开源项目非常感兴趣,想贡献自己的力量为其添加新功能,或者发现了代码中的一些bug,想为其进行修复。那么可以将该开源仓库Fork到你的仓库列表中,并对其进行修改后,向原仓库提交PR,请求仓库的管理员合并你的代码。下面假设我们的账号为rikkaii,并向lml256账号中的learngit项目提交PR为例,详细的说明一下该流程:

Fork仓库

Fork仓库非常简单,只需要到仓库首页的右上角点一下Fork按钮即可,Github会自动在你的仓库列表中创建该仓库的一个副本。

如下图,GitHub自动在你的账户上创建了一个副本,并在仓库名的下方指明了该仓库是Fork来的:

添加新功能

现在我们为该仓库添加一些新功能:

首先将该仓库clone到本地

$ git clone [email protected]:rikkaii/learngit.git
Cloning into 'learngit'...
remote: Enumerating objects: 65, done.
remote: Total 65 (delta 0), reused 0 (delta 0), pack-reused 65
Receiving objects: 100% (65/65), 5.44 KiB | 928.00 KiB/s, done.
Resolving deltas: 100% (17/17), done.

我们从master分支上新建一个特性分支,并在特性分支上面实现我们的新功能。这里简要说明下什么是特性分支:在主流的git开发模式中并不会直接在master上开发,而是在开发某个功能时新建一个分支,叫做特性分支,在其上进行开发,等到开发完成并测试完成后,再合并到master分支中,然后删除该分支。并且特性分支的名称要简明扼要,方便别人明白其作用。这里我们创建一个python-div分支用于开发新功能。

$ git checkout -b python-div
Switched to a new branch 'python-div'

我们在目录中创建一个div.py文件并在其编写一些代码:

# div.py

# div.py

def div(a, b):
    ans = a / b
    return ans

然后进行提交,并推送到GitHub:

$ git add div.py

$ git commit -m "add div.py"
[python-div 7aad1de] add div.py
 1 file changed, 5 insertions(+)
 create mode 100644 div.py

$ git push --set-upstream origin python-div
...
To rikkaii:rikkaii/learngit.git
 * [new branch]      python-div -> python-div
Branch 'python-div' set up to track remote branch 'python-div' from 'origin'.

在上面的命令中,由于python-div分支是我们本地新建的,在GitHub远程仓库中并没有该分支的相关信息,为了能够将该分支的修改推送到GitHub远程仓库上,在推送时需要添加--set-upstream参数,这样会在远程仓库中也创建一个python-div分支,并将该分支的修改推送上去。

可以看到,我们的仓库中已经有了python-div分支以及本次commit添加的div.py文件。

发起PR

接下来,你可以点击上图中分支名称旁边的的New pull Request按钮来发起一个PR。这会自动跳转到原仓库下面,并选择python-div作为要推送的分支,如下:

至于要将python-div分支上的修改推送到原仓库的什么分支上,Github在这里自动为我们选择了master分支,这里需要注意的是分支的选择与原仓库使用的什么开发模式有关,一般正规的开源仓库都会说明PR的提交规则,包括提交到什么分支以及如何描述commit等等,这需要我们仔细阅读相关的要求并遵循。这里为了演示方便,将python-div分支的修改请求推送到原仓库的master上,并且在上图下面的说明栏里也只是使用GitHub的默认说明。

接下来便可以点击上图下面的Create pull request按钮来创建一个分支了。

当出现上图的样子后,我们的PR就创建成功了。我们只需要静静等待仓库管理员的审核就行了。

修正PR

但是,有些事总是事与愿违,有时候我们认为我们的代码没有问题,但是却被仓库管理员反馈(或者被其他开发者指出)我们的代码有问题,需要我们修复。管理员通过对我们的代码进行审计后,指出了我们的错误,Github也会将管理员与我们之间及其他开发者之间(这里并没有其他开发者)对该次PR的讨论反映在了时间轴上,并会以邮件的形式通知我们:

接下来,我们按照仓库管理员的要求,对代码进行完善,修改后的代码如下:

# div.py

def div(a, b):
    try:
        ans = a / b
    except ZeroDivisionError as e:
        print('error:', e)
        return None
    return ans

修改完成后,对代码进行提交并推送到GitHub:

$ git add div.py

$ git commit -m "fix zero division error"
[python-div c3b73e7] fix zero division error
 1 file changed, 5 insertions(+), 1 deletion(-)

$ git push
...
To rikkaii:rikkaii/learngit.git
   7aad1de..c3b73e7  python-div -> python-div

当我们推送完后,无需再次发起PR,Github会自动的将该次的提交反映到原来PR时间轴上,如下图,并且Github还会向管理员发送邮件通知本次修改:

当仓库管理者通过了本次代码,将我们的代码合并到了master分支中后,我们也会收到Github发来的关于Merge本次PR的邮件通知。

接收PR

说完了如何提交PR,我们再说一说如何接收PR。作为一个开源项目的管理者,学会如何测试别人提出的PR并进行反馈或者合并是很必要的。这里假设我们的账号为lml256,以接收rikkaii账号向lml256账号中的learngit仓库提交的PR为例,详细的说明一下作为仓库的管理者,如何测试和合并PR。

审计PR

打开我们的仓库,在Pull Requests列表中可以看到rikkaii向我们的仓库提交了一个PR

点进去可以看到详细的信息:

我们可以在Files changed栏里对代码进行审计,如果代码有问题的话,可以对每行代码添加批注,以帮助PR提交者进行完善,写完批注后,点击start a review便可发起一个code review。如下:

当代码全部都审计完后,点击下图中的submit review便可以提交本次的审计结果。

提交后,我们对代码的审计结果便会反映在该PR的时间轴上,并且GitHub会向PR发起者发送回复通知邮件。

对PR进行本地测试

只在Github上凭借眼睛看并不能发现所有的问题,在对PR正式合并前,我们还需要对PR进行本地测试,如何使用git进行操作如下图:

首先我们需要将我们仓库的代码clone到本地(也可能不需要clone,如果本地已经有该仓库的话),然后拉取PR发起者仓库的相关信息,这需要我们先将PR发起者Fork的仓库添加到本地仓库的远程仓库:

$ git remote add PR_Sponsor [email protected]:rikkaii/learngit.git

$ git fetch PR_Sponsor  # 获取PR发起者仓库的相关信息
...
From rikkaii:rikkaii/learngit
 * [new branch]      dev        -> PR_Sponsor/dev
 * [new branch]      master     -> PR_Sponsor/master
 * [new branch]      python-div -> PR_Sponsor/python-div

可以看到,我们从PR发起者仓库中获取到三个分支,其中包括为我们提交PR的python-div分支。

在进行测试之前,我们还需要创建一个特性分支用于测试PR,并将python-div分支的修改merge到特性分支上进行测试:

$ git checkout -b test_pr
Switched to a new branch 'test_pr'

$ git merge PR_Sponsor/python-div
Updating 9053d5b..c3b73e7
Fast-forward
 div.py | 9 +++++++++
 1 file changed, 9 insertions(+)
 create mode 100644 div.py

Merge代码

经过一番测试后,我们确信该PR的代码没有问题,可以合并代码到PR发起者要求合并到的分支上(这里是master)。这里有两种方法来处理这个问题,一是直接使用GitHub提供的Merge按钮,这种方法比较直观方便,但是不够灵活,无法处理合并冲突;二是在本地将测试后的特性分支合并到要合并的分支上,然后手动提交。尽管第二种方式处理起来比较复杂,但是却比较灵活,可以处理Github不能胜任的地方。这里我们选择第二种:

$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

$ git merge test_pr
Updating 9053d5b..c3b73e7
Fast-forward
 div.py | 9 +++++++++
 1 file changed, 9 insertions(+)
 create mode 100644 div.py

$ git branch -d test_pr   # 这里我们的特性分支已没作用,可以删除
Deleted branch test_pr (was c3b73e7).

$ git push
...
To lml256:lml256/learngit.git
   9053d5b..c3b73e7  master -> master

这里,我们已经处理完了该PR,同时,GitHub也会检测到我们合并了该PR,也将其反映到该PR的时间轴上,并将该PR的状态设置为Merged状态,关闭该次PR:



版权所有,未经允许不得转载

原文地址:https://www.cnblogs.com/tcctw/p/12233667.html

时间: 2024-10-09 01:13:26

Github Pull Request的提出与采纳的相关文章

github的pull request是指什么意思

有一个仓库,叫Repo A.你如果要往里贡献代码,首先要Fork这个Repo,于是在你的Github账号下有了一个Repo A2,.然后你在这个A2下工作,Commit,push等.然后你希望原始仓库Repo A合并你的工作,你可以在Github上发起一个Pull Request,意思是请求Repo A的所有者从你的A2合并分支.如果被审核通过并正式合并,这样你就为项目A做贡献了

使用 VisualCode + iTerm2 提交github的Pull Request

VisualCode集成github功能,是程序猿参与开源项目的利器.相比Sublime简单了很多(插件安装繁琐,比如你试试在Sublime2 安装gosublime,这里有坑; Sublime 3修复了Package Control的Bug).总之,有大牛Eric Gramma负责的项目值得信赖,主要差别是生产效率上面. 对VisualCode还不是特别熟悉,今天使用一种混合模式进行github开源项目开发-即使用iTerm2终端clone项目,在VisualCode进行编辑和提交,在gith

(转载)新手如何正确理解GitHub中“PR(pull request)”中的意思

我从知乎看到的两个答案,分别从实际意义以及语言学角度告诉你改怎么理解PR,很简洁,这个理解非常棒,会解决新手刚看到PR(pull request)这个词时的困惑. 实际意义: 有一个仓库,叫Repo A.你如果要往里贡献代码,首先要Fork这个Repo,于是在你的Github账号下有了一个Repo A2,.然后你在这个A2下工作,Commit,push等.然后你希望原始仓库Repo A合并你的工作,你可以在Github上发起一个Pull Request,意思是请求Repo A的所有者从你的A2合

github 修改fork的代码之后如何提交代码并pull request

官方的解释还是有点模糊,我是参照这篇文章来的. http://www.linuxidc.com/Linux/2012-12/76922.htm 关于Git的版本管理的原理,我是从这篇文章里面学习的. http://wenku.baidu.com/view/78898a1fa76e58fafab00377.html 下面我来总结一下如何在github上面将他人的项目拷贝到自己的本地,修改代码之后重新上传到自己的项目主页,同时通知原项目开发者. 1.安装git工具 [plain] view plai

github小技巧之Creating a pull request 创建 pull 请求

创建一个 pull 请求是为了协作更改存储库.这些变化会产生一个分支,它确保主分支保持干净整洁. 与commits提交是不同的 在你可以打开一个 pull 请求之前,您必须创建一个分支,然后添加提交到分支.Pull 请求只能在你的分支和上游分支之间有区别时打开. 1.切换到你要改变的库 2.在"Branch"菜单,选择包含你的提交的分支. 3."Branch"菜单右侧,点击 Compare and Review 4.对比页面,将会自动选择 基本和对比分支.要改变,点

Pull Request的正确打开方式(如何在GitHub上贡献开源项目)

GitHub的官方帮助如下: Fork A Repo: https://help.github.com/articles/fork-a-repo Using Pull Requests: https://help.github.com/articles/using-pull-requests Merging a pull request: https://help.github.com/articles/merging-a-pull-request Closing a pull request:

Pull Request

● 什么是 Pull Request 首先我们来理解什么是 Pull Request A .Pull Request 是自己修改源代码后,请求对方仓库采纳该修改时采取的一种行为. ● Fork 各位请访问仓库页面,点击 Fork 按钮创建自己的仓库(图 6.2).新建的仓库名为“自己的账户名 /first-pr”.在这里我们命名为hirocastest. ● clone clone 仓库所需的访问信息显示在右侧的中央部分,让我们将它复制下来,把这个仓库 clone 到当前的开发环境中.$ git

接收Pull Request

接收到 Pull Request 后,会如图 7.1 中所示,在仓库的 Pull Request标签页中显示别人发送过来的 Pull Request 的一览表.现在让我们点击Pull Request 查看详细内容. 详细页面与我们发送 Pull Request 时的页面大致相同.点击 Mergepull request 按钮(图 7.2),Pull Request 的内容便会自动合并至仓库.在采纳之前,请尽量将接收到的 Pull Request 拿到本地开发环境中进行检查,确认是否能够正常运行以

git 上的pull request 是什么意思?

1.git 上有常见的pull request 功能 2.pull request 的含义 解释一: 有一个仓库,叫Repo A.你如果要往里贡献代码,首先要Fork这个Repo,于是在你的Github账号下有了一个Repo A2. 然后你在这个A2下工作,Commit,push等.然后你希望原始仓库Repo A合并你的工作,你可以在Github上发起一个Pull Request,意思是请求Repo A的所有者从你的A2合并分支. 如果被审核通过并正式合并,这样你就为项目A做贡献了. 解释二: