这几天给LLVM提了一些Commit,整一个提交过程非常复杂(因为其官方是不接受Github PullRequest的),review也十分严格。虽然LLVM官方给出的非常详细的开发者文档,但是,太长了,看着很复杂:LLVM Developer Policy
这里对整个PR过程做一个记录。
Patch生成
因为并不是走LLVM官方的PullRequest,而是提交到LLVM自己的review平台 https://reviews.llvm.org/ ,而平台接受的是一个patch文件。所以我们需要对更改的代码生成Patch。
因为不是走Git了,所以可以不需要Fork项目,直接clone llvm-project 即可,然后在上面进行更改。
虽然LLVM官方推荐使用arc生成patch,但是我觉得还要再装一个工具太麻烦了,直接用git diff生成就可以
git diff -U999999 main >> patch
当然也可以fork后,自己进行一些提交,然后diff两次commit之间的差异生成patch
git diff -U999999 <orig commit hash> <after commit hash> >> patch
提交Differential
生成Patch后,进入LLVM官方的review平台 https://reviews.llvm.org/ ,注册登录(可以直接用Github账号登录
左边侧边栏找到Differential,进入后在右上角 Create Diff
进入后,可以文本框内粘贴patch文件的内容,也可以直接上传Patch文件,Repository选择 rG LLVM Github Monorepo
确认后,平台就会应用这个patch,并渲染出来你修改的部分,如果没问题就选择 Create a new Revision 然后 Continue
进入后会让你编辑Title和理由,然后选择reviewer。reviewer选择要小心,因为LLVM团队太大了而且有分化,最好是提交前先搜索相关的帖子,看看哪些reviewer是熟悉这块的。找错reviewer非常难受,不仅很可能几个月没人理你,而且也可能因为不熟悉而不通过并和你battle,然后就变成你教他写代码而且猪同鸭讲…
Discussion
发布Diff后就是对线环节了,如果找对reviewer的话,他会教你写代码(×)
有一个要注意的点是,如果要更改Patch,应该点击右边的 Update Diff,然后提交的Patch应该是相对于原始的patch,而非相对于这个Patch的Patch
Commit
如果reviewer认可了你的Patch(Differential状态变为Accepted),就可以准备提交Commit了。但是正常情况下是没有Commit权限的,需要先Join Team
需要发送一封邮件,其中包含 GitHub username 和 Differential Url 到 clattner@llvm.org,而后LLVM官方会邀请你进入LLVM Github Organization,并会拉你进llvm-committers Team,以具备提交commit到llvm-project权限
进去Team后,就是具有仓库的commit权限的,但是因为没有merge权限,所以提交前要rebase,别的就都一样提交啦,提交后,reviewer平台上的Differential马上会同步上你的commit信息(相当完善