如何生成仅含插入内容的单向diff补丁(不含原文件数据)
实现仅保留插入内容的单向补丁
要生成只包含插入内容、完全剔除原文件信息的patch,你可以通过两种方式实现:
方法1:使用diff原生自定义格式选项
直接利用diff的格式控制参数,只输出新增内容:
diff --changed-group-format='%>' --unchanged-group-format='' <(xxd "originalFile") <(xxd "updatedFile") > "originalFile.patch"
参数说明:
--changed-group-format='%>':指定修改块仅显示新文件(updatedFile的xxd输出)中的内容--unchanged-group-format='':完全忽略未修改的内容块
这种方式由diff原生处理,输出结果精准,不会引入额外的过滤误差。
方法2:用grep过滤diff输出
如果更习惯用基础工具组合,也可以在原有diff命令后追加过滤逻辑:
diff -u <(xxd "originalFile") <(xxd "updatedFile") | grep '^+' | grep -v '^+++' > "originalFile.patch"
逻辑说明:
grep '^+':筛选所有以+开头的行(对应diff中的新增内容)grep -v '^+++':排除diff头部的+++行(该行仅标记新文件路径,不属于实际插入内容)
两种方式生成的patch都只包含xxd转换后的新增行,完全不涉及原文件的任何数据,满足你单向分发补丁且不共享原数据的需求。
内容的提问来源于stack exchange,提问作者datapagan
相关产品推荐
相关产品推荐

