当存储库目录结构不同时应用 git 补丁

Applying a git patch when repository directory structures differ

我通过电子邮件收到了 "code1" 上使用 format-patch 创建的 git 补丁。问题是发送它的同事显然与我有不同的目录结构。我的目录看起来像

/home
   /mydir
     /project
        /code1
           /src
           /obj
           /bin
        /code2
        /code3

我的 .git 位于 /project。他显然只有 /code1,这就是他的 .git 所在的位置。然而,他的 /code1 确实和我的 /code1.

长得一模一样

我尝试在上午 git 应用补丁,但失败并显示错误

error: src/foo.c: does not exist in index
error: src/bar.c: does not exist in index
Patch failed at <new commit message>.

我试过使用 --directory 标志,但我得到了同样的错误,只是目录名发生了变化。有什么办法吗

顺便说一句,我预计有人会将此标记为 的副本,但那里的情况有些不同,那里给出的解决方案对我没有帮助。谢谢。

git am 旨在从补丁重新创建原始提交

要重新创建原始提交(具有相同的哈希 ID 和所有内容),您的 存储库中所做的更改必须与所做的更改逐位相同在 他的 存储库中。这自然要求您的存储库具有与补丁中相同的布局(以及导致这一点的父提交)。

由于您的存储库具有不同的结构,因此您无法使用 git am 来应用补丁。您可以改用 git apply,但您将不得不对路径名稍作调整。请注意,与标准 patch 实用程序一样,-p <em>number</em> 选项可让您删除路径组件,但这在这种情况下无济于事。在这种情况下,您需要 添加 一些路径组件,因此您需要 --directory=<em>path</em>选项。