当存储库目录结构不同时应用 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>
选项。
我通过电子邮件收到了 "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>
选项。