我通过电子邮件发送了一个使用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的副本,但是那里的情况有所不同,那里的解决方案对我没有帮助。感谢。答案 0 :(得分:1)
git am
旨在从补丁中重新创建原始提交。
要重新创建原始提交(具有相同的哈希ID和所有内容),您的存储库中所做的更改必须与中的更改完全相同存储库。这自然要求您的存储库具有与补丁中相同的布局(以及导致这一点的父提交)。
由于您的存储库具有不同的结构,因此您无法使用git am
来应用该修补程序。您可以改为使用git apply
,但您必须对路径名称大惊小怪。请注意,与标准的 patch 实用程序一样,-p number
选项允许您删除路径组件,但在这种情况下,这不会有帮助。在这种情况下,您需要添加一些路径组件,因此您需要--directory=path
选项。