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



我通过电子邮件收到了一个关于"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 标志,但收到相同的错误,只是目录名称已更改。 有什么办法可以做到这一点。

顺便说一句,我预计有人会将其标记为这个问题的重复,但那里的情况有些不同,那里给出的解决方案对我没有帮助。 谢谢。

git am

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

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

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

最新更新