git无法应用二进制补丁***,需要完整的索引行。

90

当我尝试从文件应用补丁时,我看到:

错误:没有完整索引行无法将二进制补丁应用于'my/resource.png'
错误:my/resource.png: 补丁无法应用

我在提交中添加了my/resource.png,如何启用完整索引支持?

2个回答

102

检出您想创建补丁的分支。 运行此命令:

git diff-index 79fd4d7 --binary > ~/Desktop/my-patch

79fd4d7是一个占位符,表示您要比较的提交范围之前的提交。 (例如,我想要包含以下前三个提交的补丁:

aaa02b0 third commit mine
aabbbcc second commit mine
bb82aed first commit mine
79fd4d7 old commit

然后,检出你的新分支并运行git apply ~/Desktop/my-patch


42
这里要注意的重要事项是--binary命令行选项,它被diffdiff-index两者都支持。 - pimlottc
12
@kangear已经解决了这个问题,添加--reject参数,因此git apply --reject filename.diff将应用可行的部分并拒绝其余部分。 - gingerCodeNinja
1
为什么这个能够工作,而普通的 git apply 却不能? - Tola Odejayi
1
这里的占位符是什么?是提交编号吗? - ViruMax
Tola Odejayi,“git apply”不是问题所在。“git diff”才是。 - Rafael
@ViruMax 是的,它是提交号码,你可以通过 git log 找到它。它可能比这个示例中显示的数字要长得多。 - Nick Hope

6
如果你只是删除了一些文件并且收到了相同的消息,我希望可以提供另一种方法。由于我没有访问源代码的权限(因为已经重置到了另一个提交),所以我需要其他解决方案(而不是创建新的修补程序文件)。
因此,我从我的修补程序文件中删除了以下部分:
diff --git a/MyProject/Libraries/some.dll b/MyProject/Libraries/some.dll
deleted file mode 100644
index a0908d7..0000000
Binary files a/MyProject/Libraries/some.dll and /dev/null differ
diff --git a/MyProject/Libraries/some.dll.mdb b/MyProject/Libraries/some.dll.mdb
deleted file mode 100644
index d3c3912..0000000
Binary files a/MyProject/Libraries/some.dll.mdb and /dev/null differ

随后,我成功地应用了我的补丁文件!不知道为什么他要在已删除的文件上进行二进制比较...


即使您已重置了您的存储库,您仍然可以通过git reflog访问重置的提交。 - undefined

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