如何提交Pull Request - PaddlePaddle/Contrib GitHub Wiki

1、Fork仓库

跳转到PaddlePaddle/Contrib页面,然后点击右上角的Fork按钮,将会生成一个在自己目录下的Github仓库,https://github.com/YOUR USERNAME/Contrib

2、克隆仓库到本地

$ git clone https://github.com/YOUR USERNAME/Contrib
$ cd Contrib

3、同步PaddlePaddle/Contrib主仓库更新

本步骤主要是用于将主库PaddlePaddle/Contrib中已发生的更新内容同步到自己的本地仓库中。

1)首先,我们先进入到我们的本地仓库目录

$ cd Contrib

2)添加官方的远程仓库

$ git remote add upstream https://github.com/PaddlePaddle/Contrib

3)查看是否添加成功,这个时候我们能看到有两个远程仓库,一个是我们个人目录下的,一个是官方的。

$ git remote -v

origin	https://github.com/YOUR USERNAME/Contrib.git (fetch)
origin	https://github.com/YOUR USERNAME/Contrib.git (push)
upstream	https://github.com/PaddlePaddle/Contrib.git (fetch)
upstream	https://github.com/PaddlePaddle/Contrib.git (push)

4)进行更新的同步

$ git fetch upstream
$ git checkout master
$ git rebase upstream/master

4、为自己的研发工作建立本地分支

目前Contrib的功能开发或Bug修复等提交都是在master分支上来保持更新,但是为了保证我们master分支的提交记录干净清晰,我们需要基于master分支建立本地分支进行每一次开发任务的commit和提交PR(pull request)至主仓库,直到PR被Merge完成后,再对建立的任务分支进行删除。

1)首先,我们切换到master分支,基于master分支进行本地分支创建

$ git checkout master

2)创建本地任务分支,分支名字可以自己来定义

$ git checkout -b 分支名

5、安装和使用pre-commit钩子

我们统一使用pre-commit工具来管理Git预提交钩子。它可以帮助我们格式化代码,在commit前做一些自动检查,对于不满足pre-commit检查的更新是无法commit和提交PR到主仓库的,下面我们来进行一下安装和使用(所有命令在本地仓库主目录来完成):

$ cd Contrib
$ pip install pre-commit
$ pre-commit install

运行完所有命令做好安装之后就不需要在另外做其他操作了,每次执行git commit时候会自动进行相关的前置检查操作。

6、开始开发

根据自己的任务进行相关的代码和文本编写,编写完成后可以通过git status来查看相关的文件状态,使用git add来将修改文件加入到暂存区,用于后续进行commit操作。

进行commit操作时要带上本次提交的描述信息,描述信息要清晰、简洁、易懂。

$ git commit -m "描述信息"

举个例子:git commit -m "upgrade code that in image_segmentation from 2.0-alpha to 2.0-beta"

7、提交分支到个人远程仓库

$ git push origin 分支名

8、提交PR(Pull Request)

打开个人Contrib仓库页面[https://github.com/YOUR USERNAME/Contrib](https://github.com/YOUR USERNAME/Contrib),点击绿色的Compare & pull request按钮来进入提交Pull Request的页面,通过页面上的引导可以查看本次PR的变动内容,编写PR的标题和描述(同样要描述清晰)。

提交PR时注意分支选择,因为我们是基于master分支做的开发,所以base fork对应的base分支选择master,head fork对应的compare分支选择我们创建的任务分支名。

9、签署CLA协议

首次向主仓库提交PR时,需要您签署一次CLA(Contributor License Agreement)协议,以保证您的代码可以被合入,具体签署方式如下:

1)请您查看PR中的Check部分,找到license/cla,并点击右侧detail,进入CLA网站

2)请您点击CLA网站中的Sign in with GitHub to agree,点击完成后会跳转回您的Pull Request页面

以上动作结束后即完成了CLA协议签署。

10、删除远程分支

当提交的PR被成功Merge进主仓库后,我们就可以在PR的页面来操作删除远程仓库的分支。

或者另外一种方式也可以来进行同样的删除远程分支操作

$ git push origin :分支名

11、删除本地分支

最后,将本地的分支也一同删除,围绕本次开发任务的工作就结束了。

$ git checkout master
$ git branch -D 分支名

恭喜您顺利完成一次代码的贡献!