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

The*_*sis 22 linux source patch

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

War*_*ung 16

如果你没有给予任何选项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
Run Code Online (Sandbox Code Playgroud)

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

它检查的其他模式适用于我选择的版本控制系统在合并操作期间遇到相同问题时输出的文件。您可能希望针对您的VCS / SCM工具对其进行调整。


Ser*_*rge 8

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

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

  • 这对我不起作用 - 它只是将拒绝放在一个名为“-”的文件中,这是一个非常烦人的文件名。我在 Mac 上使用 2.5.8 版。 (5认同)
  • 在 Mac 上的“GNU patch 2.6”上工作正常,也许可以尝试“-r /dev/null” (2认同)

Cod*_*lor 7

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

您可能还想尝试--merge创建文件内冲突的选项。

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