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二进制补丁支持的主要内容,如果未能解决你的问题,请参考以下文章

创建包含新目录的 SVN 补丁

linux diff 命令

如何创建二进制补丁?

每天一个linux命令(36):diff 命令

如何替换一个Linux内核函数的实现-热补丁原理

diff命令和patch命令的使用