2012-02-16 81 views
2

我通过做一个子树合并将一个子项目添加到一个git存储库。我现在需要将修补程序应用于子项目,但运行“git apply -v patch_name.patch”不会返回任何内容。没有错误信息,也没有任何文件被更改。如何将补丁应用于git子树合并?

我试着单独克隆子项目(即,到一个子目录/ tmp),并将其与主项目下的子项目目录中的项目进行比较;目录是相同的。

当我在/ tmp下针对克隆运行修补程序时,它按预期应用。看来问题与子项目目录是子树合并的结果有关。

我想我可以修补新鲜克隆下的文件,然后将它们复制到我的主项目下的子项目目录中。看来我不应该那样做。有没有更好的方法呢?

+0

你有没有这个运气? – timB33 2017-09-18 16:00:38

回答

2

git apply手册引用:

如果补丁包含子模块的任何变化然后GIT中应用治疗 这些变化如下。

如果指定了--index(显式或隐式),则子模块提交必须完全匹配要应用的修补程序的索引。 如果有任何子模块被检出,则这些检出将被完全忽略,即它们不需要是最新的或清洁的,并且它们不被更新。

如果未指定--index,则补丁中的子模块提交将被忽略,并且只会检查相应子目录是否存在以及(如果可能)更新。

换句话说,你必须为git apply提供--index注意子模块。

如果您想“强制”更改,可以考虑使用正常的patch命令,尽管它不会获取权限更改等,也可能使用子树上的git checkout rev /path/to/dir(或您建议的手动副本)。