当仓库目录结构不同时,如何应用git补丁

4

我收到了一份使用format-patch创建的“code1” git补丁的电子邮件。问题在于,发送它的同事显然拥有与我不同的目录结构。我的目录结构看起来像:

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

我的 .git 存在于 /project 中。他的 .git 只存在于 /code1 中,然而他的 /code1 确实和我的 /code1 完全一样。

我尝试使用 git am 应用补丁,但是出现了错误。

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标志,但我得到了相同的错误,只是目录名称改变了。有没有办法做到这一点。顺便说一下,我预计有人会将此标记为重复问题,但那里的情况有些不同,那里给出的解决方案并没有帮助我。谢谢。

阅读链接,希望对你有所帮助。 https://blog.soltysiak.it/en/2017/08/how-to-use-git-patch-system-to-apply-changes-into-another-folder-structure/ - Jones
1个回答

4

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

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

由于您的存储库具有不同的结构,因此无法使用git am应用补丁。您可以使用git apply代替,但是您需要稍微调整路径名。请注意,就像标准的patch实用程序一样,-p number选项可让您删除路径组件,但在这种情况下没有帮助。在这种情况下,您需要添加一些路径组件,因此需要--directory=path选项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接