跳到主要内容
版本: 5.0

GitHub 提交 PR

本文将指导您如何通过 Git 贡献 RocketMQ

GitHub 远程仓库

作为前提,本节将简要解释使用 Git 贡献 RocketMQ 的原因。如果您已有相关知识,可以跳过。

首先,您需要了解 Git 和 GitHub。

思考:从开发者的角度,如何与他人协作完成一个项目?

如果您想到的是打包、压缩、再复制粘贴,那请您再想一下将参与者范围扩大到 10k+ 级别的情况。

这就是远程仓库的意义所在:开发者可以方便地从 GitHub 获取仓库代码,并将开发分支提交到远程仓库,与他人沟通和共享。

1656601484232

那么,有了这个公共仓库,接下来该怎么做呢?

如何下载远程仓库的代码?

如何提交开发分支到远程仓库?

Git 贡献指南

① fork apache/rocketmq 到个人 GitHub 远程仓库

https://github.com/cuser/rocketmq.git # cuser's rocketmq repo[repository] url

注意:cuser 为 GitHub 用户名,Fork 后您可以在个人主页 Repositories 中找到复制的仓库,并查看地址。

② 本地自行安装 Git,并克隆到本地仓库

git clone https://github.com/cuser/rocketmq.git # git clone [repo url]

注意:克隆的本地仓库将使用 GitHub 仓库作为远程仓库,并命名为 origin

③ 获取开发分支最新代码

git rebase origin/develop # git rebase [branch]

注意: rebase <branch> 基础术语为换基,结合链接实例可以了解此步骤的必要性。

④ 在本地仓库进行修改

git checkout -b RocketMQ-Vxx.0 # git checkout [-b] [new-branch]
git add /rocketmq/pom.xml # git add [dir/file]
git commit -a -m "pom" # git commit [-all] [-msg] [message]

注意: 参考 Git,使用相对路径切换到 .git 所在目录。

⑤ 推送更改到远程仓库

git push --set-upstream apache RocketMQ-Vxx.0   # push branch to https://github.com/cuser/rocketmq-site.git

GitHub 提交 PR

如下:以向 new-official-website 分支提交 PR 为例,阐述 PR 流程

参考 Git 贡献指南,修改本地仓库分支并推送到 GitHub 远程仓库。

git checkout new-official-website   # git checkout -b new-official-website
git push origin new-official-website # push to https://github.com/cuser/rocketmq-site.git

① 将 GitHub 远程仓库切换到开发分支 new-official-website

② 创建 pull request,点击 Contribute 下的 open pull request

③ compare across forks,选择请求分支和开发分支

1656580236831

base repository / base : 请求仓库和请求分支

head repository / compare : 开发仓库和开发分支

务必正确选择请求分支和开发分支,并仅在获得分支所有者许可后请求合并。

④ 填写 PR 摘要,大写字母开头,简要描述 PR 内容

1656589498318

​ 提交 PR 前,请确认如下

  1. A[GitHub Issue]( apache/rocketmq: Mirror of Apache RocketMQ (github.com) ) 对应 PR 已创建
  2. 修改内容符合 代码规范 编程约定
  3. PR 摘要以[ISSUE #XXX]开头,并简要描述变更需求
  4. 概述 PR 变更需求、变更日志及验证信息,参考 PR 示例
  5. 提交内容需包含完整的测试用例,并确保基础检查、单元测试、集成测试通过

⑤ 点击 "Create pull request" ,请求合并分支

⑥ 此时,PR 已在 apache/rocketmq-site 远程仓库可见,所有协作者可审查 PR 并提出建议

您可以根据评论在本地进行修改并多次提交。合并请求和变更提交的信息会同时显示在 PR 页面、issue 列表和 RocketMQ 邮件列表中,以便及时提醒 committer 审查 PR。

合并 PR

开源项目开发分支合并由 committer 执行。

① 合并贡献者 PR

git checkout develop    # switch to local develop branch
git pull apache develop # fast-forward to current remote HEAD
git pull --squash https://github.com/cuser/rocketmq.git RocketMQ-Vxx.0 # merge to branch

一个 pull request 合并分支可能包含多个 commit。建议使用 --squash 指令将 commit 压缩为单个 commit。

在合并前,务必解决合并冲突并确保当前分支与远程分支同步。

请阅读[Git pull]( Git - git-pull Documentation (git-scm.com) ) 了解 fast-forward 及其他信息。

② 合并 committer PR

如果 committer 合并自己的 PR,运行命令[Git merge]( Git - git-merge Documentation (git-scm.com) )

git checkout develop      # switch to local develop branch
git pull apache develop # fast-forward to current remote HEAD
git merge --squash RocketMQ-Vxx.0 # merge to branch

③ 进行常规补丁检查,使用内置测试用例构建项目,并务必修改 changelog。

④ 完成上述所有操作后,按照以下说明提交合并,将分支状态反馈给开发者,并关闭 PR。

git commit --author="contributor_name <contributor_email>" -a -m "RocketMQ-Vxx.0 description closes apache/rocketmq#ZZ"

关闭 PR 详情参考 关闭 PR

⑤ 将合并后的分支推送到 apache/rocketmq 远程仓库

git push apache develop

⑥ PR 提交后,它会保留在 GitHub 远程仓库中,您也可以同时更新您的个人 GitHub 仓库。

git push origin develop

注意: squash 会丢弃开发分支的 commit 信息

拒绝 PR

拒绝 PR:表示不执行 pull 或 merge,只提交拒绝 PR 消息。

git commit --allow-empty -m "RocketMQ-Vxx.0 closes apache/rocketmq#ZZ *Won't fix*"
git push apache develop

在 GitHub 上关闭 PR #ZZ