我有一个名为my_pcc_branch.patch的补丁。
当我尝试应用它时,我收到以下消息:
$ 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 :(得分:277)
来自msysgit@googlegroups.com邮件列表的Johannes Sixt建议使用以下命令行参数:
git apply --ignore-space-change --ignore-whitespace mychanges.patch
这解决了我的问题。
答案 1 :(得分:222)
git apply --reject --whitespace=fix mychanges.patch
为我工作。
答案 2 :(得分:46)
此命令将应用未解析的补丁,将错误文件保留为*.rej
:
git apply --reject --whitespace=fix mypath.patch
你只需解决它们。解决后运行:
git -am resolved
答案 3 :(得分:41)
当其他所有方法都失败时,请尝试git apply
's --3way
option。
git apply --3way patchFile.patch
- 3WAY
如果补丁不能完全应用,请退回3路合并 补丁记录了它应该适用的blob的身份,我们 让这些blob在本地可用,可能会留下冲突 工作树中文件中的标记供用户解析。这个 选项意味着--index选项,并且与...不兼容 --reject和--cached options。
典型的失败案例尽可能多地应用补丁,并且通常会在git中解决冲突,但通常会这样做。可能比reject
替代方案更容易一步。
答案 4 :(得分:13)
当您混合使用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(重新发送到archive.org的2013年12月3日副本)
答案 5 :(得分:10)
答案 6 :(得分:2)
在我的情况下,我愚蠢到首先错误地创建补丁文件,实际上以错误的方式区分。我最终得到了完全相同的错误消息。
如果你是主人并做git diff branch-name > branch-name.patch
,这会尝试删除你想要发生的所有添加,反之亦然(git无法完成,因为很明显,从未完成添加无法删除)。
因此,请务必检查您的分行并执行git diff master > branch-name.patch
答案 7 :(得分:1)
我找到了this link
我不知道为什么会这样,但我尝试了很多工作,这是唯一适合我的工作。简而言之,运行以下三个命令:
git fsck --full
git reflog expire --expire=now --all
git gc --prune=now
答案 8 :(得分:1)
git apply --reverse --reject example.patch
在创建具有相反分支名称的补丁文件时:
即。 git diff feature_branch..master
代替git diff master..feature_branch
答案 9 :(得分:0)
我的问题是我先运行git diff
,然后运行git reset --hard HEAD
,然后才意识到我想撤消操作,所以我尝试将git diff
的输出复制到文件中并使用{{1 }},但出现错误“补丁不适用”。切换到git apply
并尝试使用它后,我意识到由于某种原因重复了一部分差异,并且删除了重复的之后,patch
(大概也是patch
)起作用。
答案 10 :(得分:0)
如果补丁只是部分应用,而不是整个补丁。应用补丁时,请确保您位于正确的目录中。
例如,我在包含 .git
文件的父项目文件夹中创建了一个补丁文件。但是我试图在较低级别应用补丁。它只是在项目的那个级别应用更改。
答案 11 :(得分:0)
只需使用git apply -v example.patch
即可知道“补丁不适用”的原因。然后你可以一一修复它们。
答案 12 :(得分:-1)
我在这里未完全指出我所寻找的内容,我是为了其他可能会搜索相似内容的人而写。我遇到了一个问题(存在于旧仓库中),该文件已从仓库中删除。当我应用补丁程序时,由于找不到要应用的文件,补丁程序将失败。 (所以我的情况是git patch无法删除文件) '#git apply --reject'确实给出了一个观点,但并没有完全解决我的问题。我不能使用摆动,因为它在构建服务器中不可用。就我而言,我通过从尝试应用的补丁文件中删除了“已从存储库中删除的文件”的条目来解决了这个问题,因此我应用了所有其他更改而没有出现问题(使用三向合并,避免了空格错误),然后手动将已删除文件的内容合并到其移动位置。