运行“patch”而不生成 *.orig 和 *.rej 文件

运行“patch”而不生成 *.orig 和 *.rej 文件

是否可以告诉patch不生成.orig.rej文件?我发现补丁创建这些内容非常烦人。

答案1

如果您没有给除patch以外的任何选项-pN,它只会在补丁无法完全应用时创建这些文件。

因此,一种选择是停止创建(或接受)不良补丁。 :)

回到现实世界,这是一个功能。当patch(1)无法将补丁段应用于原始文件时,它将临时原始文件副本持久保存为*.orig,将被拒绝的段转储到*.rej,并继续尝试应用补丁段。这个想法是,您可以打开*.rej文件并通过将一些片段复制到修补文件来手动完成修补过程。*.orig当补丁过程意外破坏某些内容并且您需要参考原始版本来修复它时,该文件也很有用。

我并不总是用*.rej*.orig文件中的文本来修复错误的补丁,但如果我需要它们的话,拥有它们是很好的。

一旦修复了错误的补丁,我就会在项目根目录运行以下脚本来快速清理:

#!/bin/bash
find . '(' \
    -name \*-baseline -o \
    -name \*-merge -o \
    -name \*-original -o \
    -name \*.orig -o \
    -name \*.rej \
')' -delete

我之所以这样称呼它,cleanup-after-bad-patch是因为长名称可以部分确保不会意外运行它,因为它可能会删除您仍然需要的文件。不过,老实说,我通常通过键入 来运行它cleanTabEnter,这足以在PATH我的开发计算机上找到此脚本。

它检查的附加模式适用于由我选择的版本控制系统当它在合并操作期间遇到同样的问题时。您可能希望根据您的情况进行调整VCS/单片机工具。

答案2

--no-backup-if-mismatch选项将避免“.orig”文件。

您可能还想尝试该--merge选项,它会产生文件内冲突。

在所有情况下,如果合并变得难以承受,您应该有某种方法快速恢复到良好状态。

答案3

要告诉补丁不生成备份,只需省略-b和 任何--backup-...选项。

要指示它不创建.rej文件,请-r -在命令中添加选项。

答案4

我能想到的最好的方法(诚然是一种扫除地毯下污垢的方法)是使用-r <tmpfile>,即:

# patch -r /tmp/deleteme.rej -i patchfile filetobepatched

从 v2.5.8 开始,-r -实际上创建了该-文件。

相关内容