如何从要修改的目录中修补源代码树?

如何从要修改的目录中修补源代码树?

源代码树包含修改后的 dnsmasq-2.80test4 源(和 git 文件)。

现在,我想在用户主文件夹中工作时,使用diff和将最新的 2.86 dnsmasq 源代码应用于修改后的 2.80test4。patch

因此,我开始将 .../dnsmasq-2.80test4 复制到用户主目录,并使用以下命令创建 diff 文件:

~$ diff -urN ./dnsmasq-2.80test4 ./dnsmasq-2.86 > dnsmasq-2.86.diff

然后我尝试~/dnsmasq-2.80test4使用以下方法修补旧文件夹:

~$ cd ./dnsmasq-2.80test4
~$ patch --dry-run -i ../dnsmasq-2.86.diff

对于 CHANGELOG、FAQ、Makefile 和 Version 运行正常。Android.mk子目录中的第一个文件bld失败,这不是什么大问题。真正的破坏者是同一子目录中的第二个文件:

can't find file to patch at input line 466
Perhaps you should have used the -p or --strip option?
The text leading up to this was:
--------------------------
|diff -ur ./dnsmasq-2.80test4/bld/get-version ./dnsmasq-2.86/bld/get-version
|--- ./dnsmasq-2.80test4/bld/get-version    2022-07-03 17:32:08.541879257 +0200
|+++ ./dnsmasq-2.86/bld/get-version 2021-09-08 22:21:22.000000000 +0200
--------------------------

解决方法

当将工作目录更改为上一级并将较新的 /dnsmasq-2.86 源目录重命名为其他名称(或只是将其删除)时,补丁似乎已正确应用到旧的 /dnsmasq-2.80test4 目录,使用:

~$ patch --dry-run --verbose -p0 -i dnsmasq-2.86.diff

问题

如何修改diff和/或patch命令,允许我patch从需要更改的目录 ( cd ./parent/dnsmasq-2.80test4) 作为工作目录,而不是从cd ./parentdir 工作?

相关内容