git am:补丁格式检测失败

Posted

技术标签:

【中文标题】git am:补丁格式检测失败【英文标题】:git am: Patch format detection failed 【发布时间】:2018-08-25 01:53:03 【问题描述】:

我以前从未在 Git 中使用过补丁,我需要一些帮助。我正在尝试将补丁应用到 Git 存储库以测试 Wine 补丁,特别是 this patch here。所以我做了以下事情:

$ git clone git://source.winehq.org/git/wine.git
$ cd wine
$ nano patch.p1

然后我用 Ctrl+Shift+V 粘贴补丁的内容并使用 Ctrl+O 保存。然后我尝试了这个:

$ git am patch.p1
Patch format detection failed.

我做错了什么?我以前从未打过补丁。

【问题讨论】:

git am 应用邮箱格式的补丁。你链接的那个不是。你可以在上面使用git apply。然而,补丁中的代码是非常荒谬的,除非有相反的条件(负数移位会产生未定义的行为)。 @torek 虽然I am having trouble compiling Wine,git apply 似乎有效,因为它没有给出任何错误。如果您想将该评论发布给补丁创建者:bugs.winehq.org/show_bug.cgi?id=44742 我没有登录,也不打算创建一个,除非我真正开始使用 Wine。但是:+ if(MaskLength <= 32) + return ERROR_INVALID_PARAMETER; + *Mask = 0xffffffff << ( 32 - MaskLength ); 似乎测试应该是 >= 而不是 <=。 32-33 = -1(如果无符号,则为 0xffffffff),这不是有效的 << 值。但是我不知道这个函数的意图是什么。 我的问题是,我已经在windows中生成了补丁,并尝试在linux中应用,但它不起作用。我不得不在 Windows 中应用它。我相信这与两个 OS/Git 配置之间的 CRLF 设置有关 【参考方案1】:

Patch format detection failed. 可能意味着您使用了错误的命令:使用 git apply 而不是 git am 或其他方式。

请参阅What is the difference between git am and git apply? 了解更多关于 2 之间的区别。

【讨论】:

【参考方案2】:

使用以下命令: 补丁 -p1

系统会要求您指定“要修补的文件”,提及完整路径/ 假设 -R [n]: n 仍然申请? [n]: 是的

对补丁中存在的所有文件执行此操作。

如果发生任何合并冲突,请检查“.rej”文件中的冲突,该文件包含 已生成并解决和应用这些更改。 执行“git add”并“提交”您的更改。

【讨论】:

以上是关于git am:补丁格式检测失败的主要内容,如果未能解决你的问题,请参考以下文章

git applygit am打补丁.diff 和 .patch

从邮件列表应用 git 补丁

git am 合并 patch 时冲突的解决方法

git am 合并 patch 时冲突的解决方法

git am 合并 patch 时冲突的解决方法

git am 和 git apply 有啥区别?