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
之所以称呼它,是因为长名称部分地保证了不会意外运行此名称,因为它可以删除您仍然需要的文件。不过,老实说,我通常通过键入clean
TabEnter,这足以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文件。当拒绝文件为-时,丢弃拒绝。”