我通过子树合并将一个子项目添加到git存储库。我现在需要在子项目中应用补丁,但运行“git apply -v patch_name.patch”不会返回任何内容。没有错误消息,也没有任何文件被更改。
我已经尝试单独克隆子项目(即,进入子目录/ tmp)并将其与主项目下子项目目录中的内容进行比较;目录是一样的。
当我在/ tmp下对克隆运行补丁时,它会按预期应用。似乎问题与子项目目录是子树合并的结果有关。
我想我可以修补新克隆下的文件,然后将它们复制到我的主项目下的子项目目录中。看来我不应该这样做。有更好的解决方法吗?
答案 0 :(得分:2)
引用git apply
手册:
如果补丁包含对子模块的任何更改,则git apply treats 这些变化如下。
如果指定了--index(显式或隐式),则子模块提交必须与要应用的修补程序的索引完全匹配。 如果检出任何子模块,那么这些 退房完全被忽略,即它们不需要是最新的或干净的,并且不会更新。
如果未指定--index,则忽略补丁中的子模块提交,并且仅忽略或存在 检查相应的子目录并(如果可能)更新。
换句话说,您必须为--index
提供git apply
来关注子模块。
如果要“强制”更改,可以考虑使用普通的patch
命令,尽管它不会获得权限更改等,或者在子树上使用git checkout rev /path/to/dir
(或您建议的手册)。