如何将补丁应用到git子树合并中?

3
我通过子树合并将一个子项目添加到git仓库中。现在我需要对子项目应用补丁,但是运行“git apply -v patch_name.patch”没有任何输出。没有错误消息,也没有任何文件被更改。
我尝试将子项目单独克隆(即克隆到子目录/tmp中),并将其与主项目下的子项目目录进行比较;这些目录是相同的。
当我针对/tmp下的克隆运行补丁时,它按预期应用。问题似乎与子项目目录是子树合并的结果有关。
我想我可以在新的克隆下修补文件,然后将它们复制到我的主项目下的子项目目录中。看起来我不应该这样做。有没有更好的方法解决这个问题?

1
你在这方面有什么运气吗? - timB33
1个回答

2
引用自git apply手册:
如果补丁包含对子模块的任何更改,则git apply将按以下方式处理这些更改。
如果指定了--index(明确或隐式),则子模块提交必须完全匹配索引才能应用补丁。如果有任何子模块被检出,则这些检出将被完全忽略,即它们不需要是最新的或干净的,并且不会被更新。
如果未指定--index,则补丁中的子模块提交将被忽略,仅检查相应子目录的存在或缺失并(如果可能)进行更新。
换句话说,您必须为git apply提供--index以关注子模块。
如果您想要“强制通过”更改,则可以考虑使用普通的patch命令,尽管它不会获得权限更改等内容,或者在子树上使用git checkout rev /path/to/dir(或者您建议的手动复制)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接