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

时间:2017-08-03 13:54:52

标签: git patch subdirectory

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

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

我的.git坐在/ project中。他显然只有/ code1,这就是他的.git所在的位置。但是,他的/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标志,但是我得到了同样的错误,只是改变了目录名。有没有办法做到这一点。

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

1 个答案:

答案 0 :(得分:1)

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

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

由于您的存储库具有不同的结构,因此您无法使用git am来应用该修补程序。您可以改为使用git apply,但您必须对路径名称大惊小怪。请注意,与标准的 patch 实用程序一样,-p number选项允许您删除路径组件,但在这种情况下,这不会有帮助。在这种情况下,您需要添加一些路径组件,因此您需要--directory=path选项。