更新时间:2025-07-24 GMT+08:00
使用MR预合并
MR预合并概述
MR预合并指的是在Repo生成一个临时合并节点,MR创建后且代码还没有合入,用户可通过自定义WebHook、流水线等下载插件的脚本,下载Repo预合并后的代码用于代码构建等操作。
MR预合并优势
当一个合并请求需要拉起几十或上百台服务器的构建,本地客户端做预合并可能会与服务端产生的结果不一致,导致构建代码获取不够准确、构建结果不准确等问题。通过开启“MR预合并”,可以解决该实时性问题,并且构建脚本命令相比本地预合并脚本更简单,开发人员更容易上手。
约束限制
- 需要开启“MR预合并”。
- 用户需要有“设置”权限。
使用示例
下述示例展示了“开启MR预合并”和“未开启MR预合并”的脚本,可见“开启MR预合并”的脚本更简洁、高效。
- “开启MR预合并”,当MR创建后,则服务端会帮助用户生成一个临时合并节点,进而用户可以直接下载已临时合并的代码。具体操作步骤如下:
- 初始化本地代码仓,其中repo_url为合并请求仓库地址。
git init git remote add origin ${repo_url}
- 拉取服务端临时合并节点到本地分支。如下图所示,合并请求标题下的“10”即为“repo_MR_iid”,“merge-requests/${repo_MR_iid}/merge”表示临时合并节点,“${repo_MR_iid}/merge”表示本地分支。
git fetch origin +refs/merge-requests/${repo_MR_iid}/merge:refs/remotes/origin/${repo_MR_iid}/merge
图1 合并请求IID - 检出分支,即可获得预合并后代码
git checkout ${repo_MR_iid}/merge
“未开启MR预合并”,用户需要在客户端分别下载合并请求源分支、合并请求目标分支的代码,并在构建执行机自行完成合并动作。具体操作步骤如下:
- 初始化本地代码仓,其中repo_url为合并请求仓库地址。
git init git remote add origin ${repo_url}
- 拉取并检出合并请求目标分支,其中,“repoTargetBranch”为合并请求目标分支。
git fetch origin +refs/heads/${repoTargetBranch}:refs/remotes/origin/${repoTargetBranch} git checkout ${repoTargetBranch}
- 拉取合并请求源分支到本地分支,如下图所示,合并请求标题下的“10”即为“repo_MR_iid”,“merge-requests/${repo_MR_iid}/head”表示合并请求源分支,“${repo_MR_iid}/head”表示本地分支。
git fetch origin +refs/merge-requests/${repo_MR_iid}/head:refs/remotes/origin/${repo_MR_iid}/head
图2 合并请求IID - 本地执行合并,即可获得预合并后代码。
git merge refs/remotes/origin/${repo_MR_iid}/head --no-edit
父主题: 配置仓库的设置