使用git应用diff文件

时间:2013-04-10 18:54:40

标签: git github

所以我试图将一个diff文件应用到我的git dev分支。我想申请的差异是这里的:https://github.com/mbabker/joomla-cms/compare/JHtml_move.patch

我使用了git apply PATH_TO_PATCH.patch

现在尝试应用它时,我会收到大量错误累积

fatal: git apply: bad git-diff - expected /dev/null on line 47

第47行是--- /dev/null

我在另一个论坛上看到有人说在/dev/null部分之后有一个尾随的空格,但没有。

如果它有任何帮助,我也会在第9,10,11,12和13行上抛出白色空格的错误 - 尽管它们不是任何尾随的空格。

在任何情况下,差异都是由git生成的 - 我只是将其复制并粘贴到记事本中。

我也尝试使用curl https://github.com/mbabker/joomla-cms/compare/JHtml_move.patch | git am,但只是在没有指定位置的情况下发出错误。

Error message from curl attempt

关于为什么当该线实际存在时发出致命错误的任何想法????


更新@IvanZuzak 我尝试添加git am --ignore-space-change --ignore-whitespace PATH_TO_PATCH.patch然而我首先获得(因为这是下载的补丁)一个错误,说电子邮件无效(它已被转换为HTML代码)所以我试图修复它但它一直在扔它不时地起来。然后它说previous rebase directory PATH_TO_GITHUB_BRANCH/.git/rebase-apply still exists but mbox given.。所以我发现this建议删除branches .git文件夹中的rebase-apply文件夹。所以我做了那个然后我再次收到无效的电子邮件错误(尽管我已经改变了两个远离html格式的)

7 个答案:

答案 0 :(得分:41)

我也有同样的问题:

fatal: git apply: bad git-diff - expected /dev/null on line 47

然而第47行读--- /dev/null。我发现的问题是行结尾是Windows格式而不是UNIX格式。在Notepad ++中将行结尾转换为UNIX格式为我解决了这个问题。

答案 1 :(得分:4)

我有同样的问题。我开辟了Git Bash(Cygwin也是如此)并做了:

dos2unix.exe <patch-file>

然后我能够很好地应用补丁。

答案 2 :(得分:1)

我遇到了同样的问题,但我正在测试一个我要发送到listserve的补丁,遵循这里的建议:https://www.kernel.org/doc/Documentation/email-clients.txt。我无法在我的本地文件上修复问题,我需要分发一个可能会被gmail破坏的补丁,我正在使用git apply检查gmailed版本。

我的同事向我指出

git am 

在纠正这些类型的问题时优于git apply,并且应该与.patch文件一起使用。在上面的一条评论中提到了这一点,但它应该是一个答案。

答案 3 :(得分:1)

在Git 2.17(2018年第二季度)之后,您必须检查是否仍然看到错误消息bad git-diff - expected /dev/null on line 47

&#34; git apply&#34;知道&#34; /dev/null&#34;发出信号&#34;差异的这一边没有这样的文件。在解析补丁时可以跟着空格和垃圾,除了一个补丁,它会使一个其他有效的补丁(例如来自颠覆的补丁)被拒绝。

commit e454ad4Tatyana Krasnukha (tkrasnukha)(2018年2月15日) commit f16ef7bJohannes Schindelin (dscho)(2018年2月15日) (由Junio C Hamano -- gitster --合并于commit 177bd65,2018年2月28日)

另见git-for-windows/git issue 1489

  

apply:优雅地处理带有/dev/null的Subversion差异

     

Subversion生成的diff可以包含如下所示的行:

     

--- / dev / null(不存在)

     

让我们教Git应用机器优雅地处理这样一条线。

答案 4 :(得分:0)

我遇到了同样的问题 你有一个正在进行的改造,写

git rebase --skip 

多次,直到看到No rebase in progress? 然后使用git am

再试一次

答案 5 :(得分:0)

我遇到了同样的问题。

fatal: git apply: bad git-diff - expected /dev/null on line 96

或者,如果我将所有行结尾转换为Unix格式:

error: patch failed: <file>:81
error: <file>: patch does not apply
...

git apply --ignore-whitespace <patch>.patch使用Unix line-endings。

答案 6 :(得分:0)

我可能在这一行中有一些额外的文字 --- /dev/null (nonexistent)

从“null”中删除所有符号,直到行尾为我提供帮助(在应用其他答案的建议后)。