2011-01-22 144 views
164

我有一个名为my_pcc_branch.patch的补丁。git:补丁不适用

当我尝试应用它,我获得以下信息:

$ git apply --check my_pcc_branch.patch 
warning: src/main/java/.../AbstractedPanel.java has type 100644, expected 100755 
error: patch failed: src/main/java/.../AbstractedPanel.java:13 
error: src/main/java/.../AbstractedPanel.java: patch does not apply 

是什么意思?

我该如何解决这个问题?

+0

是否存在任何AbstractedPanel.java.rej文件?典型的这意味着一条线条机器人在源代码和补丁中发生了变化(这里第13行似乎受到了影响)。 – Rudi 2011-01-24 10:44:49

+0

不,我没有找到任何* .rej文件。 – 2011-01-25 12:56:32

回答

231

约翰内斯Sixt的使用下面的命令行参数提示:

git apply --ignore-space-change --ignore-whitespace mychanges.patch 

这解决了我的问题。

10

它发生在混合UNIX和Windows git客户端,因为Windows并不真正具有“x”位的概念,所以您在Windows下的rw-r--r--(0644)文件的签出由msys POSIX层“提升”为rwx-r-xr-x(0755)。 git认为模式差异基本上与文件中的文本差异相同,所以你的补丁不能直接应用。我认为你唯一的选择是将core.filemode设置为false(使用git-config)。

这里有一个问题msysgit与一些相关的信息:http://code.google.com/p/msysgit/issues/detail?id=164[email protected]邮件列表(重新路由到archive.org的2013年12月3日复印件)

+2

我试图运行命令“git config core.filemode false”,但它没有帮助 - 我仍然收到相同的消息。 – 2011-01-22 20:19:12

+0

假设您的树中没有未提交的更改,请尝试`git reset --hard HEAD`以强制git使用新选项生效来重新签出文件。 – 2011-01-22 20:25:54

+0

刚试过执行“git reset --hard HEAD”。它成功了(我看到了“HEAD现在在...”的信息),但“git apply”的问题仍然存在。 – 2011-01-22 22:46:23

159

git apply --reject --whitespace=fix mychanges.patch为我工作。

33

该命令将应用补丁没有解决它留下不好的文件作为*.rej

git apply --reject --whitespace=fix mypath.patch 

你一定要解决这些问题。一旦解决运行:

git -am resolved 
1

当所有其他都失败时,尝试git apply's --3way option

git apply --3way patchFile.patch

--3way
当补丁不干净的应用,依傍3路,如果 补丁记录它应该适用于斑点的身份合并,我们 在本地提供这些blob,可能会在工作树中的文件中留下冲突 标记以供用户解决。此 选项意味着--index选项,并且与 --reject和--cached选项不兼容。

典型的失败案例尽可能多地应用该修补程序,并且让你在git中遇到冲突,但通常情况下这样做会造成冲突。可能比reject替代方案更容易一步。