将单个补丁应用于多个目录中的文件

将单个补丁应用于多个目录中的文件

目录结构如下所示:

orig/l1/l2/file2patch

orig/l1-2/file2patch

new/l1/l2/file2patch

new/l1-2/file2patch

我得到了这些文件之间的正确差异并将其保存在一个文件中,但事实证明应用它并不简单。

我已经尝试过patch -d orig/ < patch.diff,但-d期望要修补的文件应立即存在于orig

有什么方法可以让补丁在目录上重复出现并将补丁应用到补丁中存在的指定文件吗?

答案1

虽然给定的路径名​​看起来不太正确(尤其是new树,其他人已经更改了),但您可以记住,可以告诉程序从使用该选项patch的输出中忽略给定数量的目录级别。diff-p

当将补丁应用于与补丁文件显示的目录不同的目录中的文件时,您将cd进入该目录(以取消不匹配的一部分)并使用该-p选项来调整cd.

这是一个简短的脚本,说明了我如何解决这个问题(使用 GNU 补丁的试运行选项来进行简单的列表):

#!/bin/sh
cd /tmp/foo
OUT=/tmp/patch.diff
rm -f $OUT
diff -u orig/l1/l2/file2patch new/l1/l2/file2patch >>$OUT
diff -u orig/l1-2/file2patch new/l1-2/file2patch >>$OUT

diffstat -p1 $OUT
cd orig
patch -p1 --dry-run <$OUT

输入:

$ find . -type f
./new/l1/l2/file2patch
./new/l1-2/file2patch
./orig/l1/l2/file2patch
./orig/l1-2/file2patch

输出:

$ /tmp/xx
 l1-2/file2patch  |   19 +++++++++++++------
 l1/l2/file2patch |    5 ++---
 2 files changed, 15 insertions(+), 9 deletions(-)
/tmp/foo/orig
patching file l1/l2/file2patch
patching file l1-2/file2patch

进一步阅读:

相关内容