You need to enable JavaScript to run this app. 如何将Git某仓库的指定提交合入目录结构不同的另一Git仓库
优惠活动
大模型
产品
解决方案
定价
更多

如何将Git某仓库的指定提交合入目录结构不同的另一Git仓库

解决方法

你遇到的报错核心原因是两个独立仓库的对应目录基线不一致,Git默认会校验patch上下文与本地文件匹配才会应用,你需要的是类似SVN --accept=tf的「强制以源文件内容覆盖目标文件,跳过基线校验」的效果。

方案1:适配你现有patch流程的修改

  1. 生成patch的步骤保持不变,在installer仓库执行:
git format-patch --binary -1 <待同步的commit哈希>

会生成前缀为数字的.patch文件。

  1. 到software仓库应用patch时增加强制参数即可:
git am -p2 --directory='dist' --ignore-whitespace --force <patch文件路径>

如果仍有报错,改用更底层的git apply命令,完全跳过校验强制应用:

git apply --binary -p2 --directory='dist' --no-check --unsafe-paths <patch文件路径>

其中--no-check就是等效SVN --accept=tf的核心参数,会跳过所有本地文件与patch的匹配校验,直接用源提交的内容覆盖目标文件。

方案2:更稳妥的跨仓库目录同步方案(无需调整路径层级参数)

如果调整-p参数经常出错,可以直接导出指定目录的差异并替换路径后应用:

  1. 在installer仓库导出对应commit的tomcat目录差异:
git diff --binary <commit父版本号> <commit版本号> -- common/tomcat > tomcat_sync.patch
  1. 到software仓库替换路径后直接应用:
sed 's/common\/tomcat/dist\/tomcat/g' tomcat_sync.patch | git apply --binary --no-check

Git与SVN --accept=tf的等效参数说明

SVN的--accept=tf全称是--accept=theirs-full,作用是合并时完全使用源版本内容覆盖目标,Git对应场景的等效参数如下:

  • 应用patch场景:git apply --no-check
  • 同仓库分支合并场景:git merge -X theirs
  • 拉取远程分支合并场景:git pull -X theirs

内容的提问来源于stack exchange,提问作者Andreas N

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 12:45:07