Answers:
如果您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工具进行调整。
要告诉补丁程序不产生备份,只需省略-b和任何--backup-...选项。
要指示它不要创建.rej文件-r -,请在命令中添加选项。
GNU patch 2.6在Mac 上正常工作也许可以尝试-r /dev/null
补丁-p1 -B / dev / null -r-<file.patch
-B标志不会将*.orig输出发送到/dev/null,就像命令中显示的一样。碰巧,普通用户无法写入名为之类的文件/dev/nullfoo.cpp。如果以root用户身份执行此操作,则/dev树中将出现垃圾。其次,-r -不隐藏*.rej文件。它只是似乎这样做,因为由于虚假错误-B标志向您显示它停止它真的会做没有-B,这是创建一个名为-在当前目录。
man patch:“ -r将拒绝放入替代文件而不是默认的.rej文件。当拒绝文件为-时,丢弃拒绝。”