【问题标题】:Applying a git patch when repository directory structures differ当存储库目录结构不同时应用 git 补丁
【发布时间】:2018-01-11 04:24:46
【问题描述】:

我收到一封电子邮件,其中包含使用格式补丁创建的“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 的副本,但那里的情况有些不同,那里给出的解决方案对我没有帮助。谢谢。

【问题讨论】:

标签: git patch subdirectory


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-18
    • 2012-07-16
    • 1970-01-01
    • 2015-05-21
    • 2015-03-27
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多