git二进制补丁支持
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git二进制补丁支持相关的知识,希望对你有一定的参考价值。
参考技术A 在某个rpm包的编译过程中,需要替换其中一张图片。在rpmbuild -bp之后,替换该图片,使用fit format生成了新的补丁。
在spec中使用常规的patch -p1方式打补丁,编译报错,提示如下:
git binary differ not surpport
看来,常规的patch方式不知二进制补丁。
在spec中使用个git的方式打补丁
applypatch()
git apply $RPM_SOURCE_DIR/0001-xxxx.patch ###补丁名称
%patch1 -p1
applypatch
另外在buildrequire 中增加git的依赖
可以正常编译
编译完成后,解开生成的rpm包,查找替换的图片,成功替换。
git am:补丁格式检测失败
【中文标题】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二进制补丁支持的主要内容,如果未能解决你的问题,请参考以下文章