运行“修补程序”而不生成* .orig和* .rej文件


20

是否可以告诉patch不产生.orig.rej文件?我发现补丁创建这些文件非常令人讨厌。

Answers:


14

如果您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 / SCM工具进行调整。


7

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

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


4
这对我不起作用–它将拒绝项放入名为“-”的文件中,该文件名非常令人讨厌。我在Mac上使用2.5.8版。
rjmunro

GNU patch 2.6在Mac 上正常工作也许可以尝试-r /dev/null
Stuart Cardall

3

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

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

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


1

我卡在补丁v2.5.4中,-r -导致它创建名为的拒绝文件-

我发现,如果为--reject-file=空值,则2 如果尝试写入拒绝文件,则补丁会因退出代码而失败。如果没有拒绝,它将按预期工作。尽管对于较旧版本的补丁程序不是完整的解决方案,但在某些情况下,这是可以接受或期望的。


0

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

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

因为在v2.5.8中-r -实际上创建了-文件。


-3

补丁-p1 -B / dev / null -r-<file.patch


-1:这是非常糟糕的建议。首先,该-B标志不会将*.orig输出发送到/dev/null,就像命令中显示的一样。碰巧,普通用户无法写入名为之类的文件/dev/nullfoo.cpp。如果以root用户身份执行此操作,则/dev树中将出现垃圾。其次,-r -不隐藏*.rej文件。它只是似乎这样做,因为由于虚假错误-B标志向您显示它停止它真的会做没有-B,这是创建一个名为-在当前目录。
沃伦·杨

1
@WarrenYoung根据man patch:“ -r将拒绝放入替代文件而不是默认的.rej文件。当拒绝文件为-时,丢弃拒绝。”
凌波鹏
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.