使用git应用diff文件

问题描述 投票:20回答:7

所以我试图使用一个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,但只是在没有指定位置的情况下给出错误。

有什么想法,为什么它在线路实际存在时发出致命错误????


更新到@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格式的)

git github
7个回答
41
投票

我也有同样的问题:

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

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


4
投票

我遇到过同样的问题。我开辟了Git Bash(Cygwin的工作原理)并做了:

dos2unix.exe <patch-file>

然后我能够完美地应用补丁。


1
投票

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

我的同事向我指出了这一点

git am 

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


1
投票

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

git apply”中的许多地方都知道“/dev/null”表示“在diff的这一侧没有这样的文件”,在解析补丁时可以跟随空格和垃圾,除了一个,这是一个有效的补丁(例如被颠覆的人拒绝了。

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的应用机器优雅地处理这样一条线。


0
投票

我有同样的问题你有一个正在进行的改变,写

git rebase --skip 

很多次,直到看到No rebase in progress?然后再次尝试与git am


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。


0
投票

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

删除“null”中的所有符号直到行结束帮助我(在应用其他答案的建议之后)。

© www.soinside.com 2019 - 2024. All rights reserved.