git am:补丁格式检测失败。

26

我以前从未使用过Git的补丁,需要一些帮助。 我正在尝试将补丁应用于Git存储库以测试Wine补丁,具体来说是此处的补丁。 所以我按照以下步骤操作:

$ 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.

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


7
git am 命令适用于邮箱格式的补丁。你提供的补丁不是这种格式的,可以使用 git apply 命令来应用它。但是,除非存在一个相反的条件(通过负数偏移会产生未定义的行为),否则补丁中的代码相当荒谬。 - torek
1
@torek 当我在编译Wine时遇到了麻烦,但是git apply似乎已经成功了,因为它没有出现任何错误。如果您想将该评论发布给补丁创建者,请访问:https://bugs.winehq.org/show_bug.cgi?id=44742 - Aaron Franke
1
我在那里没有登录,也不打算创建一个账户,除非我真正开始使用Wine。但是:`+ if(MaskLength <= 32)
  • return ERROR_INVALID_PARAMETER;
  • *Mask = 0xffffffff << ( 32 - MaskLength );` 看起来测试应该是“>=”,而不是“<=”。32-33=-1(如果无符号,则为0xffffffff),这不是有效的“<<”值。但是我不知道函数的意图。
- torek
1
我的问题是,我在Windows中生成了补丁,尝试在Linux中应用它,但无法工作。我不得不在Windows中应用它。我认为这与两个操作系统/Git配置之间的CRLF设置有关。 - Vijay
2个回答

40

6

使用以下命令:

patch -p1 < patch_file_name.patch

  • 会要求您指定要打补丁的文件,请提供完整路径 /。
  • 假设 -R [n]: n
  • 应用? [n]: y

对于所有包含在您的补丁中的文件都执行此操作。

  • 如果发生任何合并冲突,则请检查生成的 ".rej" 文件中的冲突,并解决并应用这些更改。
  • 执行 "git add " 并 "commit" 您的更改。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接