基于Bitbucket Server Java API创建PR时如何指定源分支?
核心解决方法
Bitbucket Server API 的 PullRequestCreateRequest.Builder 提供 fromRefId 方法指定源分支,分支需要符合Bitbucket的标准Ref格式,添加refs/heads/前缀。你注释的fromBranch是不存在的API,替换为对应的fromRefId即可。
同时你原有代码的合并逻辑存在错误,创建PR后需要拿到返回的PR实例才能发起合并请求,不能直接传入创建PR的请求对象,修正后的完整代码如下:
if (MYCONDITION) { PullRequestImpl pullRequest = new PullRequestImpl(); //实现PullRequestService的自定义类 PullRequestCreateRequest prCreate = new PullRequestCreateRequest.Builder() .title("Automatic Merge Branch Foo Into Master") .description("自动合并固定分支到master,解决PR异常差异问题") .repository(request.getRepository()) // 从方法入参获取当前仓库实例 .fromRefId("refs/heads/MyBranch") // 替换MyBranch为你的实际源分支名 .toBranchId("refs/heads/master") // 目标分支也建议补全前缀避免匹配异常 .build(); // 接收创建完成的PR实例,后续合并需要用到实例的ID、版本号等信息 PullRequest createdPr = pullRequest.create(prCreate); // 构造合并请求 PullRequestMergeRequest mergeRequest = new PullRequestMergeRequest.Builder(createdPr) .version(createdPr.getVersion()) .build(); // 执行合并 pullRequest.merge(mergeRequest); }
注意事项
- 所有分支的RefId都建议补全
refs/heads/前缀,否则可能出现分支匹配失败、PR指向错误分支的问题 - 执行合并前可先调用
pullRequest.canMerge(createdPr.getId())检查当前PR是否符合仓库的合并规则(如评审要求、检查项通过要求等),避免合并请求抛出异常 - 执行API调用的服务账号需要拥有对应仓库的PR创建权限、master分支合并权限,否则会触发权限校验失败
- 如果你的仓库开启了PR合并前必须经过构建、评审等规则,需要对应调整逻辑等待规则满足后再发起合并,或给自动化账号配置规则豁免权限
内容的提问来源于stack exchange,提问作者dinkelbrot
相关产品推荐
相关产品推荐

