打补丁时是否可使用通配符匹配两个字符间的任意字符序列
可用解决方案整理
下面是几种不用每次重新生成补丁的实现方式,按易用性排序:
1. 用sed命令直接动态替换(最推荐)
完全不用维护固定diff补丁,一行命令即可实现不管旧值直接替换:
- 整行替换(适配任意旧SRCREV值):
该命令会匹配所有以sed -i 's/^SRCREV = .*/SRCREV = "实际需要的checksum"/' 目标文件路径SRCREV =开头的行,整行替换为指定内容,完全不依赖旧checksum的值。 - 仅替换引号内的checksum内容(匹配更精准,避免误改):
只会修改行首为sed -i 's/^SRCREV = "[^"]*"/SRCREV = "实际需要的checksum"/' 目标文件路径SRCREV = "且符合引号包裹格式的行,安全性更高。
2. 调整diff补丁的匹配规则
如果必须使用diff格式的补丁,可以通过以下两种方式降低对旧checksum的依赖:
- 打补丁时开启模糊匹配:执行
patch命令时添加-F参数,允许上下文内容存在差异时仍尝试应用补丁,示例:patch -p1 -F 20 < 你的补丁文件路径 - 手动修改补丁文件的匹配行:把补丁中旧值行只保留前缀特征,修改后补丁示例:
这样补丁只会匹配以@@ -xxx +xxx @@ (这里保留原来的行号信息) -SRCREV = " +SRCREV = "你需要的checksum"SRCREV = "开头的行,不需要完全匹配旧的checksum值。
3. 场景特化方案(针对Yocto/OpenEmbedded)
如果你的SRCREV是Yocto配方里的字段,完全不需要打补丁,直接在自定义的local.conf或者层配置文件中添加如下行即可全局覆盖:
SRCREV_pn-<对应配方名> = "你需要的checksum"
这种方式不需要修改原配方文件,也不需要维护任何补丁,是该场景下的最优解。
内容的提问来源于stack exchange,提问作者neolith
相关产品推荐
相关产品推荐

