# 获取 PR 列表
= "gh pr list -s open --json number,title,mergeable"
cmd = jsonlite::fromJSON(system(cmd, intern = TRUE)) |> dplyr::arrange(number)
prs
prs
处理 PR
预计将会收到超过 200 条 Pull Request,因此需要使用 GitHub CLI 工具 gh
来合并 Pull Request,提高合并的工作效率。
获取 PR 列表
获取所有 Open 状态的 PR 列表,然后合并所有可合并的 PR。
自动合并
对于没有冲突的 PR,直接合并。
使用 gh 合并
for (i in seq_len(nrow(prs))) {
if (prs$mergeable[i] == "MERGEABLE") {
= paste("gh pr merge", prs$number[i], "--merge --auto")
cmd system(cmd)
Sys.sleep(30)
} }
每次合并之后,需要再次获取 PR 列表,以更新 mergeable
状态。
在本地合并
将 PR 下载到本地,然后合并到本地分支。合并完成后,再 push 到远程分支。从而完成合并。
# 下载 PR 到本地
for (i in seq_len(nrow(prs))) {
= prs$number[i]
pr = glue::glue("git fetch origin pull/{pr}/head:{pr} && git merge {pr} --auto -m 'merge pull/{pr}' && git branch -d {pr}")
cmd system(cmd)
}
继续改进的话,可以通过检查 system()
的返回值,来判断是否存在冲突。
手动合并
对于有冲突的 PR,需要手动解决冲突。
$mergeable != "MERGEABLE", ] prs[prs
实施步骤:
git pull
git fetch origin pull/123/head:pr # 123 是 PR 号
git merge pr
解决冲突后,提交合并。
git add <冲突文件>
git commit -m "Merge PR #123"
git push
删掉本地分支。
git branch -d pr
将上面的操作简化为三行命令为:
git fetch origin pull/46/head:pr && git merge pr
# 在这里打开冲突文件,人工解决冲突后,然后才能继续
git commit -am 'fix' && git branch -d pr