想知道patch是如何生成的?

最近打包 hplip,需要 patch 几个源文件来避免 rpmlint 的几个报错。

根据这里:openSUSE:Build Service Tutorial - openSUSE patch 可以用 diff 或者 quilt 两种方式来生成。
但是问题是我用 quilt 或者 diff 生成的 patch 有如下头部:

Index: hplip-3.16.3/io/hpmud/jd.c
===================================================================
--- hplip-3.16.3.orig/io/hpmud/jd.c
+++ hplip-3.16.3/io/hpmud/jd.c

然后在 spec 中用 %patch100 命令来打补丁。
可以看到路径包含了 hplip 的版本号,这样的问题是一旦更新了 hplip 的版本,又得重新编辑生成 patch 了,因为路径有变动。
想问有没有更方便的办法?我看到 M17N/fcitx 项目下的 patch 有如下的头部格式:

---
 data/fcitx-autostart.desktop.in |    1 +
 1 file changed, 1 insertion(+)
--- a/data/fcitx-autostart.desktop.in
+++ b/data/fcitx-autostart.desktop.in

想知道这种风格的 patch 头部是如何生成的?

解决了,使用 quilt refresh -p ab 命令即可生成 a/b 风格的 patch。
因为实际打补丁的命令是 patch -p1 < XXX.patch,所以前面的文件夹目录写什么其实都无所谓 :sunglasses:

我是用 git diff --patch-with-stat 来生成补丁

同楼上,个人喜欢用 git diff 来生成 patch, 然后使用的时候用 patch -p1 来打

hplip 这个包是只能从 SourceForge 上面下载到的新版本源码,所以没法用 git。

有版本号不是问题。patch 的时候进入源码目录, patch -p1 < …/your-patch ,其中"p1" 选项就相当于忽略最顶层的目录。
%patch 默认启用 -p1 选项的。否则变了版本号还要跟着变补丁——即使它本身仍然适用——这就太麻烦了。
参看
processors.wiki.ti.com/index.php/Working_with_Linux_patches

wiki.centos.org/HowTos/RebuildSRPM

你可以 git init 啊

从我的 iPhone 发送,使用 Tapatalk